Trong ngắn hạn: nó không phải là một sự khác biệt lớn và bạn có thể sử dụng bất cứ điều gì cảm thấy đúng trong bối cảnh. Tôi sẽ gắn bó với JApplication/setUserState
bởi vì tôi nghĩ rằng mã sẽ tự giải thích tốt hơn.
Sự khác biệt thực tế:
Cả hai phương pháp này sẽ lưu trữ nhà nước quy định tại phiên. JApplication/setUserState
thực tế sẽ sử dụng nội bộ JSession/set
để lưu trữ trạng thái.
Điều gì JApplication/setUserState
khác nhau là nó sẽ lưu trữ mọi cặp khóa giá trị trong một JRegistry. Vì vậy, nó là tương đương với:
$session = JFactory::getSession();
$registry = $session->get('registry');
$registry->set('myvar', $myvarvalue);
Vì vậy, điểm của việc sử dụng một số JRegistry
là gì? Đó là khá nhiều chức năng được cung cấp JRegistryFormat
. Bạn có thể sử dụng nó để cả hai phân tích và định dạng tiểu bang:
$session = JFactory::getSession();
$registry = $session->get('registry');
$json = $registry->toString('JSON');
$xml = $registry->toString('XML');
Nó cũng giá trị chỉ ra rằng việc sử dụng JApplication/setUserState
tiểu bang của bạn sẽ kết thúc trong "mặc định" không gian tên:
$app = JFactory::getApplication();
$app->setUserState('myvar', $myvarvalue);
// $_SESSION['default']['registry']->set('myvar', $myvarvalue)
Nguồn
2012-11-02 14:31:26
Cảm ơn cho câu trả lời chi tiết ! Tôi cảm thấy tôi hiểu sự khác biệt/điểm tương đồng hiện tại :) – TryHarder