Tôi muốn biết nếu nó được chấp nhận/ưa thích sử dụng phương thức self :: method() và parent ::() khi làm việc trong các lớp php.
Bạn có thể sử dụng $ this-> method() nhưng $ this-> cũng có thể tham chiếu đến biến lớp, biến lớp cha hoặc phương thức từ lớp cha. Không có sự mơ hồ trong bản thân ::
Tự ngã :: và không có bất kỳ cảnh báo hoặc phản đối nào khi sử dụng kiểu này?
Tôi hiểu rằng self :: và parent :: tham chiếu đến một thể hiện tĩnh của lớp, nhưng trong kohana, trừ khi bạn xác định cụ thể một phương thức tĩnh, có vẻ như không có sự khác biệt.
Cảm ơn.
Added một ví dụ: Giả sử ứng dụng này các cửa hàng các diễn đàn từ nhiều trang web ...
class Forum_Controller extends Controller {
function __construct()
{
parent::__construct();
}
function index()
{
echo self::categories();
}
/*
* get a list of categories from a specific site.
*/
private function categories()
{
$db = new Database;
$categories = $db->query("
SELECT * FROM
forum_categories
WHERE fk_site = '$this->site_id'
");
$view = new View('categories_view');
$view->categories = $categories;
return $view;
}
}
ví dụ này hoạt động trong Kohana với báo cáo lỗi thiết lập để: error_reporting (E_ALL & ~ E_STRICT);
$ this-> site_id được định nghĩa trong lớp Controller_Core chính (thư viện ở kohana).
Theo như tôi biết, $ điều này không được phép có sẵn vì tôi đang tự gọi :: danh mục() theo cách tĩnh, nhưng chỉ khi tôi xác định danh mục() là tĩnh thì nó phát ra lỗi . Tuy nhiên, như tôi đã nói, tôi thích sử dụng self :: vì từ góc độ dễ đọc, tôi biết chính xác vị trí của hàm này, thay vì sử dụng $ điều này gây ra sự mơ hồ, đối với tôi.
Lý do mã này làm việc là bởi vì bạn không bao giờ được đề cập đến một $ trường hợp này của các đối tượng trong các tĩnh gọi là phương pháp loại. – null