【问题标题】:What does this do: $this->var1 = function($var2);?这是做什么的:$this->var1 = function($var2);?
【发布时间】:2011-05-29 01:32:45
【问题描述】:

我正在学习 OOP PHP。我已经了解了父子类的关系和相互之间的互动,所以在这方面一切都很好。

这行代码虽然让我很困惑,但我不确定它的作用:

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

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

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

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

提前谢谢你。

诺洛

【问题讨论】:

  • 是字面意思还是 function 某个函数的其他名称?这很重要,因为function 是一个具有特殊含义的保留关键字。
  • 仔细查看properties 上的 PHP 文档。
  • 谢谢outis。一直在这样做。 :) Deceze,不,这不是它所说的。我只是将语法通用化,因为当时我知道每个部分是什么,但无法翻译语法。

标签: php oop


【解决方案1】:

它将对象$thisvar1 字段设置为函数返回的值。需要美元符号来解析 this 是什么(一个对象),->var1 告诉 php 找到该对象的 var1 字段,所以那里不需要 $

【讨论】:

    【解决方案2】:
    $this 
    

    指的是当前的类实例和

    $this->var1
    

    本质上是指这个类实例的变量/属性$var1(通常声明或与__get或__set等魔术方法结合使用

    查看这里以参考魔术方法

    http://php.net/manual/en/language.oop5.magic.php

    【讨论】:

      【解决方案3】:

      当你在 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) 的结果。

      【讨论】:

        【解决方案4】:

        假设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

        【讨论】:

        • 这也可能有助于澄清 OP 在这部分有点偏离:“它调用了 当前类的函数”。
        【解决方案5】:

        它将函数 ($var2) 的结果存储在 $var1 中。

        在程序化 php 中,同样是 $var1 = nameOfFuction($var2);

        在类中,变量不能直接访问。相反,语法变为:

        $this-> 表示您正在访问当前类的属性(变量)。 var1 是属性的名称。

        创建类时,会调用构造方法(类中的函数),var1 会自动填充 nameOfFuction($var2) 的结果。

        当一个属性是“私有”时,意味着它不能从类外部调用,这意味着它只能在类内部使用,并且可能通过公共方法访问。

        【讨论】:

          猜你喜欢
          • 2015-06-17
          • 2011-04-02
          • 2011-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多