这有什么作用:$this->;var1=函数($var2);


What does this do: $this->var1 = function($var2);?

我正在学习面向对象PHP。我已经了解了亲子课堂关系和彼此之间的互动,所以在这方面一切都很好。

这行代码让我很困惑,我也不确定它能做什么:

$this->var1 = function($var2);

可以让您更清楚地了解代码的信息:它是位于类构造函数内部的一行,var1在上面被声明为private。要调用的函数位于类之外,但位于同一文件中。

我知道,从本质上讲,它调用当前类的函数,同时传递$var2。但是"var1="部分究竟是做什么的呢?为什么不包括美元符号?

语法是有效的,因为我正在查看别人的代码,它会产生所需的结果。我只是想学习一下,以备将来参考。

提前谢谢。

Nolo

它将对象$thisvar1字段设置为函数返回的值。需要美元符号来解析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"时,意味着不能从类外调用它,这意味着它将仅在类内使用,并且可能通过公共方法访问。