gpt4 book ai didi

php - 使用 $this, self::, parent::提高代码可读性

转载 作者:可可西里 更新时间:2023-10-31 22:41:28 25 4
gpt4 key购买 nike

我想知道在 php 类中工作时是否可以接受/首选使用 self::method() 和 parent::method()。

您可以使用 $this->method() 但 $this-> 也可以引用类变量、父类变量或父类中的方法。 self::没有歧义

self::是否已贬值和/或使用此样式是否有任何注意事项或缺点?

我理解 self::和 parent::指的是类的静态实例,但是在 kohana 中,除非你专门将一个方法定义为静态的,否则似乎没有区别。

谢谢。

添加了一个例子:假设此应用程序存储来自多个网站的论坛...

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;
}

}

此示例在 kohana 中运行,错误报告设置为:error_reporting(E_ALL & ~E_STRICT);

$this->site_id 在主 Controller_Core 类(kohana 中的一个库)中定义。

据我所知,$this 不应该可用,因为我以静态方式调用 self::categories(),但只有当我将 categories() 定义为静态时,它才会抛出错误。

但正如我所说,我更喜欢使用 self::,因为从可读性的角度来看,我确切地知道这个函数应该在哪里,而不是使用 $this ,这会导致歧义,对我来说就是这样。

最佳答案

有区别。

$this 引用一个对象的实例。

parentself 用于静态调用方法。

This page of PHP's manual比我现在有时间写的更详细地解释它。特别是第一个例子应该有助于突出一些差异。我鼓励您复制粘贴第一个示例并弄乱它,因为我认为如果您还不知道其中的区别,那么它是一个重要的概念,需要牢记在心。

关于php - 使用 $this, self::, parent::提高代码可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1136184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com