我正在学习面向对象PHP。我已经了解了亲子课堂关系和彼此之间的互动,所以在这方面一切都很好。
这行代码让我很困惑,我也不确定它能做什么:
$this->var1 = function($var2);
可以让您更清楚地了解代码的信息:它是位于类构造函数内部的一行,var1在上面被声明为private。要调用的函数位于类之外,但位于同一文件中。
我知道,从本质上讲,它调用当前类的函数,同时传递$var2。但是"var1="部分究竟是做什么的呢?为什么不包括美元符号?
语法是有效的,因为我正在查看别人的代码,它会产生所需的结果。我只是想学习一下,以备将来参考。
提前谢谢。
Nolo
它将对象$this
的var1
字段设置为函数返回的值。需要美元符号来解析this
是什么(对象),而->var1
告诉php查找该对象的var1
字段,因此不需要$
。
$this
指当前类实例和
$this->var1
本质上是指该类实例的变量/属性$var1(通常与__get或__set 等魔术方法一起声明或使用
看看这个参考神奇的方法
http://php.net/manual/en/language.oop5.magic.php
当你在PHP中定义一个类时,你可以给类实例变量和函数变量:
class Foo
{
public $bar = 'bar';
public function __construct($bar)
{
echo $bar; //this line will echo 'baz'
echo $this->bar; //this line will echo 'bar';
}
}
$foo = new Foo('baz');
若要访问类实例的属性,需要将该对象用作引用。从外部来看:
$foo->bar = 'fizz';
而内部是:
$this->bar = 'buzz';
因此,总之,构造函数中的行将$obj->var1
的值设置为function($var2)
的结果。
假设function
实际上是一个函数的名称,并且没有定义某个函数,它会将当前类实例上的属性var1
(即$this
)设置为yourFunction($var2)
的结果;
例如:
class MyClass {
public $id;
function updateId($newid) {
$this->id=$newid;
}
}
$test=new MyClass();
$test->updateId(50);
echo $test->id;
这个脚本的输出将是50
。
通过调用updateId()
函数,类更新自己的内部变量id
。
它将函数($var2)的结果存储在$var1中。
在程序php中,$var1 = nameOfFuction($var2);
也是如此
在类内部,变量不是直接访问的。相反,语法变为:
$this->
表示您正在访问当前类的属性(变量)。var1是属性的名称。
创建类时,将调用构造函数方法(类内的函数),并使用nameOfFution($var2)的结果自动填充var1。
当一个属性是"private"时,意味着不能从类外调用它,这意味着它将仅在类内使用,并且可能通过公共方法访问。