PDA

View Full Version : Các hàm sử dụng nhiều nhất trong PHP.



conan1212
27-12-2006, 12:02
Conan đang chuyển qua học PHP, mà thấy PHP có quá nhiều hàm [có thể nói là dư thừa] Vì vậy Lập Topic nài mong mí bác bên PHP chỉ+ bình loạn xem các hàm nào của PHP được sử dụng nhiều nhất trong lập trình PHP. Hàm nào chạy nhanh hơn hàm nào.
Mặc dù kiến thức chẳng bao nhiêu nhưng Conan mạo muội góp vài hàm mà Conan cho là sử dụng nhiều nhất:
Thứ nhất là hàm để xuất dữ liệu ra:

echo(data); or print(data) ;
Thứ hai có lẽ là hàm dùng để lấy dữ liệu từ phía Client:

$_POST(data); $_GET(data)
;
tiếp đến là mí cái hàm của để tưong tác với mySQL.

mysql_connect($host, $user, $pass);
mysql_select_db($database);
mysql_query($myquery);

Tiếp đến là hàm sử lí chuỗi:


str_replace($1,$2,$myString);
strlen($myString);
...

TheHeTre
27-12-2006, 13:21
+ echo() và print() và printf() sử dụng trong các trường hợp khác nhau.
+ GET[] và POST[] phương thức khác nhau.

Còn dùng nhiều nhất là Cấu trúc điều khiển if...elseif ...else :D Cái này trong ngôn ngữ nào cũng nhiều nhất.

Theo mình tùy từng project mà hàm nào được dùng nhiều nhất. Các hàm trong PHP không dư thừa. Bác nào lôi được hàm nào thừa ra gọi em :-?

thienthan36
27-12-2006, 13:38
hi hi
Các hàm trong php thực ra là không dư thừa ! Tùy vào mục đích mà bạn muốn làm gì thì dùng các hàm có chức năng để giúp bạn mà thôi. còn không thì thôi.
Các sever khi cài php thì đa số chỉ cài các libary thông dụng như mysql, xml, gd, hash,... ngoài ra thì chẳng cài các libary khác.
Nếu bạn sử dụng những hàm đã có sẵng thì bảo đảm tốc độ chạy ứng dụng của bạn sẽ nhanh hơn nhiều nếu bạn tự tay xây dựng hàm

conan1212
27-12-2006, 14:47
Hì , mí bác thiệt là làm Conan ngưỡng mộ quá , mí bác thuộc lòng hết mí hàm của PHP rùi hém. Conan thì chỉ mới nhớ đc mí hàm {._.}
Conan nói thừa ở đây là nói đến mí cái hàm có cùng chức năng nhưng mà lại có cách khai báo khác nhau ví dụ:

$HTTP_POST_VARS['form_name'], $HTTP_GET_VARS['String_name']
$Form_name, $String_name, $_GET('String_name'), and $_POST("Form_name")

conan1212
27-12-2006, 14:51
echo(); print(); printf(); khác nhau làm seo nhỉ, Conan thấy nó tương tự mud, đều dùng để xuất dữ liệu ra hết mud ?

mrsinguyenus
27-12-2006, 15:44
trong php các bác nên dùng cấu trúc


foreach()
{
//
}

thay cho


for()
{
//
}

mr47
27-12-2006, 18:35
$_POST, $_GET, foreach, if-else

mấy cái đó đâu phải là hàm ^^

amida
27-12-2006, 19:03
Hì , mí bác thiệt là làm Conan ngưỡng mộ quá , mí bác thuộc lòng hết mí hàm của PHP rùi hém. Conan thì chỉ mới nhớ đc mí hàm {._.}
Bao nhiêu đó mà bảo nhiều thì mình chẳng biết bao nhiêu mới là ít lol


khác nhau làm seo nhỉ, Conan thấy nó tương tự mud, đều dùng để xuất dữ liệu ra hết mud ?
Vậy thì bạn chỉ ở mức độ TB thôi, vì không phải tự nhiên mà nó giống nhau :) Giữa print và printf chỉ khác mỗi chữ f nhưng dùng khác nhau. Còn giữa print và echo thì mình kô biết, chắc mình cỡ TB khá thôi lol
@mrsinguyenus: Bạn có thể giải thích thêm về nhận định đó kô?

Mình viết code thì chỉ toàn tự thiết kế các hàm, bỏ vào class thế là dùng. Đừng phụ thuộc vào hàm có sẵn nhiều quá.

conf
28-12-2006, 01:54
echo, print, printf khác nhau chứ. Xem thêm PHP Manual để biết nhé


--------------------------------------------------
echo -- Output one or more strings
void echo ( string arg1 [, string argn...])
Outputs all parameters.
--------------------------------------------------
print -- Output a string
int print ( string arg)
Outputs arg. Returns 1, always.
--------------------------------------------------
printf -- Output a formatted string
void printf ( string format [, mixed args])
Produces output according to format, which is described in the documentation for sprintf().



Mình viết code thì chỉ toàn tự thiết kế các hàm, bỏ vào class thế là dùng. Đừng phụ thuộc vào hàm có sẵn nhiều quá.

Tất cả các ngôn ngữ lập trình đều recommend sử dụng hàm dựng sẵn, tiết kiệm nhiều công sức và tốc độ xử lý sẽ nhanh hơn rất nhiều so với tự thiết kế hàm (có khi bạn bỏ thời gian viết 1 function hàng chục line, sau đó xem lại thì mới biết PHP chỉ cần 1 hàm có sẵn) :D

amida
28-12-2006, 08:44
Tất cả các ngôn ngữ lập trình đều recommend sử dụng hàm dựng sẵn, tiết kiệm nhiều công sức và tốc độ xử lý sẽ nhanh hơn rất nhiều so với tự thiết kế hàm (có khi bạn bỏ thời gian viết 1 function hàng chục line, sau đó xem lại thì mới biết PHP chỉ cần 1 hàm có sẵn) :D

Tuỳ. Theo mình thì khi viết thành 1 hệ thống (class) thì nên tạo ra những hàm cơ bản trong cấu trúc class để tiện khi dùng. Ví dụ khi báo lỗi, thay vì print(".....") thì $this->class->msg->error01(), hàm này cũng trả về 1 kết quả như print thôi.
Xem thêm trong source của ibf, mấy hàm truy vấn db nó cũng thiết kế lại và để thẳng trong class, gọi là synchronization.
Mì ăn liền ăn thì nhanh nhưng kô ngon.

conan1212
28-12-2006, 09:35
Bao nhiêu đó mà bảo nhiều thì mình chẳng biết bao nhiêu mới là ít lol


Vậy thì bạn chỉ ở mức độ TB thôi, vì không phải tự nhiên mà nó giống nhau :) Giữa print và printf chỉ khác mỗi chữ f nhưng dùng khác nhau. Còn giữa print và echo thì mình kô biết, chắc mình cỡ TB khá thôi lol
@mrsinguyenus: Bạn có thể giải thích thêm về nhận định đó kô?

Mình viết code thì chỉ toàn tự thiết kế các hàm, bỏ vào class thế là dùng. Đừng phụ thuộc vào hàm có sẵn nhiều quá.
Nhưng mà nghe nói là Class chỉ tiện chứ không nhanh, vì phải tham chiếu roài xuất gì gì đó ...
Conan còn nghe nói là nên sử dụng hàm có tham số để try xuất Class .
Hic PHP cũng rắc rối hém.

conan1212
28-12-2006, 09:43
echo, print, printf khác nhau chứ. Xem thêm PHP Manual để biết nhé


--------------------------------------------------
echo -- Output one or more strings
void echo ( string arg1 [, string argn...])
Outputs all parameters.
--------------------------------------------------
print -- Output a string
int print ( string arg)
Outputs arg. Returns 1, always.
--------------------------------------------------
printf -- Output a formatted string
void printf ( string format [, mixed args])
Produces output according to format, which is described in the documentation for sprintf().




Tất cả các ngôn ngữ lập trình đều recommend sử dụng hàm dựng sẵn, tiết kiệm nhiều công sức và tốc độ xử lý sẽ nhanh hơn rất nhiều so với tự thiết kế hàm (có khi bạn bỏ thời gian viết 1 function hàng chục line, sau đó xem lại thì mới biết PHP chỉ cần 1 hàm có sẵn) :D
Hic giờ mới biết, cám ơn bác đã giải thích giúp Conan cái dụ


echo(); print(); printf();

Hic đúng là Conan cần phải đi xóa mù PHP gắp gắp

amida
28-12-2006, 10:26
Nhưng mà nghe nói là Class chỉ tiện chứ không nhanh, vì phải tham chiếu roài xuất gì gì đó ...
Conan còn nghe nói là nên sử dụng hàm có tham số để try xuất Class . Hic PHP cũng rắc rối hém.

Đúng là tốc độ sẽ giảm nhưng ở những dự án lớn, nhất là teamwork thì kô có class thì rất khó khăn, như đã nói, đã code thì phải synchronization

mrsinguyenus
28-12-2006, 11:15
Class là tập hợp một nhóm các hoạt động nào đó lại với nhau thành các hàm. Để các bác dể quản lý và bảo trì sau này, ví dụ như class db dùng để kết nối, truy xuất csdl, class user thì dùng để đăng ký xóa user...
Nói chung dùng class ta có thể viết chưong trình trở nên sáng hơn...

TheHeTre
28-12-2006, 13:29
Còn với mình nếu không có Class thì thật là một điều tồi tệ :D

mrsinguyenus
28-12-2006, 14:03
Đúng rồi đó, PHP5 đã đưa php lên một vị thế mới so với các ngôn ngữ tân thời JAVA, ASP.NET.

conan1212
29-12-2006, 08:25
Còn nữa template là một thứ không thể thiếu, và cũng đc sử dụng nhiều. Template cho phép tách biệt phần mã với giao diện --> đơn giản , tiết kiêm thời gian cho bộ phận design, hic nhưng lại làm bộ phận code phải tốn nhiều thời gian.

conan1212
29-12-2006, 08:28
Nhân đây bác nào biết cách replace nhiều kí tự cùng một lúc trong một chuỗi giúp Conan với.
ví dụ như :

$myString=" Toi thich học PHP";
--> replace chữ toi thành Conan, chữ PHP thành PHP 5.0.1

TheHeTre
29-12-2006, 08:42
:D
Cũng đơn giản thôi. Dùng hàm strtr()


<?php
$search = array("toi" => "Conan", "PHP" => "PHP 5.2.0");
$input = "Toi thich học PHP";

$output = strtr($input, $search);

?>

conan1212
29-12-2006, 09:59
http://ddth.com/images/smilies/biggrin.gif
Mà sao khi gởi dữ liệu theo phương thức POST thì PHP nó lại chèn mấy cái kí tự khác vô dữ liệu Post của em nhỉ:
ví dụ:
<a href="index.php">Home</a>
nó thay lại bằng:
<a href=\"index.php\">Home</a>
Tương tự: ' thay bằng \'
rồi \ nó thay bằng \\ là làm seo nhỉ?
?!

cái nick đó
29-12-2006, 10:02
chưa tắt magic quotes

conan1212
29-12-2006, 10:41
chưa tắt magic quotes
Cám ơn bác ['cái nick đó] nhiều hén http://ddth.com/images/icons/icon1.gif, đúng là Conan chưa tắt cái đó.
Hóa ra là do chưa tắt magic quotes nên PHP cứ chèn lung tung vô dữ liệu của Conan.
Công nhận là học PHP dzui hơn ASP biết thía em học PHP từ sớm hic hic
Giờ thấy mình chậm biết là bao.

conan1212
29-12-2006, 11:51
Hic đang học tới phần sử lí file thì bí đoạn này:
Đầu tiên là mở file
seo đó Conan phải làm seo để có thể bit đc là file đó có bao nhiêu dòng?
+ mở file sau đó chỉ đọc một dòng nào đó thôi thì làm thía nào mí bác hỉ?

cái nick đó
29-12-2006, 12:22
dùng hàm nào thì tớ cũng chả biết :D nhưng thử explode nó bằng "\n" (theo Linux file format) hay "\r\n" (theo Windows file format) xem sao :D

conan1212
29-12-2006, 14:25
Cannot modify header information - headers already sent by (output started at E:\Thuchanh\mysite\edit.php:1)
-->lỗi này phải làm seo hả chời ,hic php nhiều lỗi Wé đi.

jiSh@n
29-12-2006, 18:03
Cannot modify header information - headers already sent by (output started at E:\Thuchanh\mysite\edit.php:1)
-->lỗi này phải làm seo hả chời ,hic php nhiều lỗi Wé đi.

Trước khi gọi header thì ko được xuất dữ liệu về browser. Trường hợp ở đây là line 1 thì có khả năng bị unicode signature.

billard
29-12-2006, 18:37
có thể là do file edit.php của bạn tạo bằng notepad nên nó chèn thêm 3 ký tự ẩn ở đầu file. Bạn nên tạo 1 file mới bằng các chương trình như Dreamweaver rồi copy nội dung file edit.php vào, save đè lên file cũ.
thường thì dùng session_start() rất hay bị trường hợp này.

amida
29-12-2006, 19:37
3 cái file in file out này mà có học pascal thì vững vàng tiến bước :D

conan1212
30-12-2006, 08:21
Hóa ra là do cái dòng này trong file php.ini


output_buffering = Off

sữa lại thành


output_buffering = On

Chạy okie, bác nào hông tin thử test lại bít liền.
Còn nếu các bác không muốn phải sử dụng cái dòng: session_start(); session_register("session");
thì trong php.ini sữa lại
session.auto_start = 0 thành
session.auto_start = 1
sẽ cho phép khởi tạo session và cookie một cách tự động. Mà không phải sử dụng session_start() hay session_register() (^J^)

jiSh@n
30-12-2006, 08:25
Có một lời khuyên là ko nên sửa đổi các thông số mặc định của php.ini, code chạy được với các thông số mặc định thì sẽ dễ dàng hơn cho bạn khi cài đặt ứng dụng của mình trên những host khác nhau.

conan1212
30-12-2006, 08:52
Thế hả bác, chết thật thía mà em lại đi sữa mí chết chứ.
Các bác có ai biết cái hàm nào của PHP để lấy dữ liệu trả về của phương thức Post mà không bị chức năng


magic_quotes_gpc = On
ngoài hàm
str_replace(); không?
Hôm qua theo lời bác The He Tre em tắt nó , bi h theo lời bác em bật nó trở lại như mặc định rùi. Nhưng mà dữ liệu truyền qua các phương thức POST hay GET đều bị PHP chèn thêm vào các kí tự như \" , \' nếu nó thấy dữ liệu nhập vào có ", và '
Mà thông thường trên host thì cái chức năng này là bật hay tắt nhỉ ?

kid08
30-12-2006, 12:32
cái đó để tránh bị sql injection thôi, muốn bỏ đi u dùng hàm stripslashes() là đc

conan1212
30-12-2006, 14:32
Biết là thế, nhưng nó lại replace luôn những dòng mà người dùng nhập vào, hic có giải pháp nào tối ưu hơn không nhỉ?

kid08
30-12-2006, 16:40
u nói rõ hơn đc ko :-/, nếu ko đc thì lúc cho dữ liệu vào xài hàm addslashes rồi xuất ra thì xài hàm stripslashes chắc okie :P

conan1212
31-12-2006, 11:51
Ý mình là khi nhập dữ liệu vào, nếu dữ liệu nhập có mấy cái dấu \' hay \" thì nó cũng replace luôn theo với cái magic_quote_gpc, kết quả là dữ liệu ghi vào CSDL cũng mất đi mấy cái kí hiệu đó.

kid08
31-12-2006, 13:38
bình thương thì magic_quote_gpc là bật, bạn cứ thử dùng cách mìh chỉ xem có đc ko :), bác conan rảnh add YM em cái, có gì cùng thảo luận PHP :D (mr.kid08)

cái nick đó
31-12-2006, 14:06
nếu dữ liệu có nhập vào là \' và magic quote bật thì nó sẽ thành \\\' <-- stripslashes vẫn tốt chán.

conan1212
01-01-2007, 08:57
vậy là sử dụng stripslashes để sử lí dữ liệu phải hôn?!
Để conan test lại, cám ơn bác " Cái nick đó" + kid nhiều hén.

TheHeTre
01-01-2007, 16:57
Nên lập chủ đề cụ thể để hỏi về các vấn đề này vì thông thường mỗi topic mọi người chỉ vào 1 vài lần thôi :D

Cách làm không cần quan tâm đến cái MAGIC on hay off là xử lý chuỗi trước khi nhập và xuất data, kết hợp 2 hàm stripslashes() và str_replace():





function strEditInputData($input) {
$data = str_replace("&acute;","'", $input);
$data = str_replace("&quot;","\"", $input);
return $input;
}



function strEditOutputData($output) {
$out = stripslashes($output);
return $output;
}

conan1212
01-01-2007, 21:56
Uhm bác The He Tre nói đúng, chúng ta đang bị lạc đề ^http://ddth.com/images/smilies/smile.gif^
- Nói túm lại các hàm sử dụng nhiều nhất trong PHP là hàm để xuất dữ liệu ra trình duyệt, hàm sử lí chỗi , mảng, và hàm để try xuất dữ liệu từ mySQL. Còn các thứ khác như statement, class, function, template, cũng quang trọng, không kém.
Giờ Conan liệt kê hàm xuất dữ liệu:


echo();
print();
print();
<?= data;?>

Mấy thứ trên cũng không hẳn là hàm, có thể hiểu chúng như là thành phần của PHP.
http://ddth.com/images/smilies/biggrin.gif Bác nào vào sau nhớ cho vài hàm sử lí chuỗi xem nào.

phuongnd
20-01-2007, 08:00
Cannot modify header information - headers already sent by (output started at E:\Thuchanh\mysite\edit.php:1)
-->lỗi này phải làm seo hả chời ,hic php nhiều lỗi Wé đi.

Bạn sử dụng function này đề fix bug trên.
<?php
function redirect($filename) {
if (!headers_sent())
header('Location: '.$filename);
else {
echo '<script type="text/javascript">';
echo 'window.location.href="'.$filename.'";';
echo '</script>';
echo '<noscript>';
echo '<meta http-equiv="refresh" content="0;url='.$filename.'" />';
echo '</noscript>';
}
}
redirect('http://www.google.com');
?>

trangtan1986
20-01-2007, 09:31
tôi hay dùng cách này để láy dử liệu từ một query


$sql="SELECT * FROM test";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
$id=$row['id'];
}

Thế nhưng nếu chỉ lấy thông tin từ 1 record nhất định thì làm sao hả các bạn

tekimatsu
20-01-2007, 10:39
Có ai giải thích giùm mình công dụng của các hàm ko?

mysql_fetch_array

mysql_fetch_row

Dctran
20-01-2007, 11:55
mysql_fetch_array => hàm để duyệt các bản ghi theo thuộc tính column name (tên trường trong bảng)

mysql_fetch_row => hàm để duyệt các bản ghi theo thuộc tính chỉ mục (thứ tự các trường trong bảng)

trangtan1986
21-01-2007, 15:13
bạn có thể giải thích giúp mình hàm ereg() được ko , trong trang php.net có cho 1 vi dụ là :
int ereg ( string pattern, string string [, array &regs] )


<?php
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
echo "$regs[3].$regs[2].$regs[1]";
} else {
echo "Invalid date format: $date";
}
?>
Mình ko hiểu pattern là cái gì , và ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})" là cái gì bạn có giải thích giúp mình ko

kid08
21-01-2007, 15:56
("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})" <<-- là một regular expression, bạn nên tìm hiểu về cái này trứoc khi tìm hiểu hàm ereg. Hàm ereg là để kiểm tra 1 string có đúng quy tắc ko và có thể trả về giá trị cần tìm trong string đó