10/10/2018, 11:12

xin các pro php giúp đỡ

Các anh cho em hỏi trong các function của joomla họ thường dùng tham chiếu(&) và em coi mã nguồn của Zend fw thì họ lại ko dùng cách viết này mà thường khi muốn dùng phải khởi tạo đối tượng mới
Vậy mình dùng tham chiếu thì có lợi gì,cám ơn các anh
Vô Thin viết 13:12 ngày 10/10/2018
Tham chiếu & thường thấy trong code PHP 4, qua PHP 5 ít thấy viết có tham chiếu ấy. Thực ra không có cái nào hại và lợi, mà vì PHP là ngôn ngữ bắt chước từ ngôn ngữ khác cho nên có lẽ là tham chiếu là thừa hưởng từ C/C++, nó làm cho người chuyển từ C/C++ sang đỡ bối rối. Ở PHP 5 dường như tham chiếu hay không cũng rứa.
mr.mabu viết 13:22 ngày 10/10/2018
cám ơn anh,em coi sách về joomla cũng thấy họ lúc dùng lúc ko,thật bó tay nên mới nhờ các anh chỉ rõ lợi hại của việc dùng tham chiếu
cám ơn anh
kiem_bo viết 13:28 ngày 10/10/2018
theo như kiến thức hạn hẹp của mình thì nếu dùng & thì khi các thao tác trong hàm khi trả về biến nào có gán & thì sẽ thay đổi còn ngược lại là ko

Xem vd sau

vd ta có

$x=1;
$x=2;
function testref(&$x1,$x2)
{
$x1++;
$x2++;
}
khi chạy testref($x1,$x2);
thì kết quả là $x1=2;$x2=2;
mr.mabu viết 13:19 ngày 10/10/2018
cám ơn anh kiem_bo cái đó em rõ nhưng em vẫn ko hiểu lợi ích của việc dùng tham chiếu(&) là gì vì php.net dành hẳn 1 phần nói về nó.
Còn em đọc sách về joomla thì nói là dùng để ko phải khởi tạo đối tượng 2 lần...ko biết là có lợi gì nữa?
fotech_nd viết 13:12 ngày 10/10/2018
Được gửi bởi mr.mabu
cám ơn anh kiem_bo cái đó em rõ nhưng em vẫn ko hiểu lợi ích của việc dùng tham chiếu(&) là gì vì php.net dành hẳn 1 phần nói về nó.
Còn em đọc sách về joomla thì nói là dùng để ko phải khởi tạo đối tượng 2 lần...ko biết là có lợi gì nữa?
Được gửi bởi mr.mabu
cám ơn anh kiem_bo cái đó em rõ nhưng em vẫn ko hiểu lợi ích của việc dùng tham chiếu(&) là gì vì php.net dành hẳn 1 phần nói về nó.
Còn em đọc sách về joomla thì nói là dùng để ko phải khởi tạo đối tượng 2 lần...ko biết là có lợi gì nữa?
Mình suy đoán như sau:

Giả sử một hàm có một tham số là một object mà ta ko dùng tham chiếu thì mỗi khi hàm được gọi thì PHP sẽ phải copy toàn bộ instance của tham số này này vào một vùng nhớ mới để xử lý. Còn nếu dùng tham chiếu thì PHP sẽ dùng luôn instance của tham số này để thao tác (tức là chỉ truyền vào địa chỉ ô nhớ của tham số đầu vào). => Có thể là dùng tham chiếu thì PHP sẽ phải xử lý ít hơn và tránh việc khởi tạo các biến giống hệt nhau trong bộ nhớ (Bạn thử tưởng tượng xem một chương trình của bạn phải gọi bao nhiêu hàm thì sẽ thấy ý nghĩa của việc dùng tham chiếu)
mr.mabu viết 13:26 ngày 10/10/2018
Được gửi bởi fotech_nd
Mình suy đoán như sau:

Giả sử một hàm có một tham số là một object mà ta ko dùng tham chiếu thì mỗi khi hàm được gọi thì PHP sẽ phải copy toàn bộ instance của tham số này này vào một vùng nhớ mới để xử lý. Còn nếu dùng tham chiếu thì PHP sẽ dùng luôn instance của tham số này để thao tác (tức là chỉ truyền vào địa chỉ ô nhớ của tham số đầu vào). => Có thể là dùng tham chiếu thì PHP sẽ phải xử lý ít hơn và tránh việc khởi tạo các biến giống hệt nhau trong bộ nhớ (Bạn thử tưởng tượng xem một chương trình của bạn phải gọi bao nhiêu hàm thì sẽ thấy ý nghĩa của việc dùng tham chiếu)
như em đã so sánh với Zend fw họ ko dùng điều mà anh nói,chả lẽ các lập trình viên kỳ cựu như vậy lại ko rõ điểm lợi này?
fotech_nd viết 13:17 ngày 10/10/2018
Được gửi bởi mr.mabu
như em đã so sánh với Zend fw họ ko dùng điều mà anh nói,chả lẽ các lập trình viên kỳ cựu như vậy lại ko rõ điểm lợi này?
Ẹc - Chắc là do Zend FW yêu cầu PHP 5 trở lên, mà trong PHP5 thì mặc định là các object đều được tham chiếu => thế nên trong Zend FW hay trong PHP 5 nói chung thì các object đều đã được tham chiếu hết nên có viết & ở trước object hay không viết thì đều là tham chiếu hết. Mình chỉ suy đoán ý nghĩa của việc dùng tham chiếu thôi mà
Phata viết 13:15 ngày 10/10/2018
Được gửi bởi mr.mabu
như em đã so sánh với Zend fw họ ko dùng điều mà anh nói,chả lẽ các lập trình viên kỳ cựu như vậy lại ko rõ điểm lợi này?
Theo như suy nghĩ của mình thì cái zend là fw, nên những đối tượng của nó ko được tạo sẵn(tạo sẵn chi khi bít mình có xài ko..?), những cái tạo sẵn thì mình ko nên thay đổi, còn joomla thì nó là cms, 1 cms thì phải có những chức năng đó bởi vậy nên người ta tạo sẵn các đối tượng cần thiết. ví dụ như đối tượng jFactory

$config =&JFactory::getConfig();//hàm getConfig sẽ lấy 1 thuộc tính trong jFactory trả ra,thuộc tính này lại là 1 đối tượng và là static(I think), và $config dùng tham chiếu đó nên ko phải tạo đối tượng 2 lần
echo 'Site name is ' . $config->getValue( 'config.sitename' );

Thay vì bạn phải
$config = $doi_config_cua_joomla;//rat nguy hiểm, vì có thể $doi_config_cua_joomla đã bị gán thành gì khác.//bạn có thể bắt gặp mô hình nguy hiểm này trong wordpress(best lightweight cms ).

Theo tớ thì hoàn toàn ko thể so sánh joomla với zend .

PS: Joomla có áp dụng mô hình singleton nên có những đối tượng chỉ dc phép khởi tạo 1 lần (bởi framework của joomla)..

Các bác chém nhẹ e thui nhá
Bài liên quan
0