我已经开始真正深入了解其他人的代码,我希望这被认为是一个简单的问题,但有些东西让我失望,希望你能解释一下:
当读取这个简单的启动脚本到模板引擎时,我注意到没有为$ variable->对象设置定义或变量。
class Template {
protected $file;
protected $values = array();
public function __construct($file) {
$this->file = $file;
}
}
如果您在上面的基本代码中注意到$ this-> file = $ file,则会引用“file”对象而不会定义它。它是__construct函数的原因吗?还是我错过了别的什么?如果是这样,所有构造变量在函数中设置为“define()”吗?
问题是,__construct是否作为一个define()使得“file”可以在代码中的任何地方使用,就像它是一个变量$ file一样?或者“受保护”基本上定义了变量$ file,允许我使用变量$ file。但如果是这样的话,
怎么来
function __construct($file)
看起来不像:
function __construct(file) if that is the case?
猜猜我对如何调用“文件”以及代码的哪个部分定义为“文件”感到困惑?
答案 0 :(得分:1)
$file
属性在您的班级中定义:
class Template {
protected $file; // <-- HERE
protected $values = array();
无论如何,定义属性不是强制性的。在PHP中,您可以为对象的属性赋值,即使它没有在类中定义。
然而,这是一种不正常的工作方式,这有两个原因:
public
如果必须可以从任何位置访问该属性private
,如果它必须仅从类本身可用,和protected
是否必须从其类本身或任何扩展它的类访问它。
如果您定义没有访问修饰符的属性,则默认情况下它将是公共的。如果你根本没有定义这个属性,它将是相同的,但是没有更多的线索来弄清楚发生了什么。如果您打算使用或维护您的代码的开发人员想要杀死您,只使用未定义的属性,因为我可以保证他们愿意。