【问题标题】:How to call a function inside a class from within a function in the same class?如何从同一类中的函数中调用类中的函数?
【发布时间】:2012-10-26 07:14:12
【问题描述】:

我是 PHP 类的新手,我想知道如何调用驻留在我调用它的同一个类中的函数。这是正确的还是最好的方法?

page1.php:

 $object=new MyClass();
 $object->func1(); 

MyClass.php:

class MyClass{

    function func1(){
        ....
         $object->func2();
    }

    function func2(){
        ....
    }

}

我想这样做的原因是因为 func1 会在 func1 结束时调用 func2 但我还需要在其他情况下独立于 func1 使用 func2 我认为如果这可能它会减少代码(即使它只是从 func2 复制/粘贴并将其放在 func1 的末尾)。

编辑:或者我可以使用:

self::func2();

【问题讨论】:

    标签: php class


    【解决方案1】:

    您可以使用$this 来引用当前对象,从而调用$this->func2()

    (当您在对象实例的上下文中时,PHP 会自动填充 $this 的值。)

    【讨论】:

    • 否; self 指的是类,而不是类的实例(因此它使用范围解析运算符 :: 而不是实例成员运算符 ->)。如果func2 是静态方法,那么它可以工作,但如果它是需要从实例属性中读取的常规方法,则需要使用$this
    • 如果 self:: 指向该类,我有点困惑,它不会仍然执行该函数吗?和/或你的意思是使用 this-> 我留在同一个实例中,因此永远不会离开第一个参数 $object->func1() 的范围。我只是想完全理解这一点[双关语;),对不起,这里是凌晨 3:28]
    • 所以一个类涉及到两件事:一个是类本身,它只是一组定义,然后是这个类的instances,它们是从该类创建的单个对象。例如,如果您定义一个类A,然后说$x = A()$y = A(),那么您有一个类(A) 和两个实例(x, y)。同一类的实例具有所有相同的方法,但它们的属性不一定共享相同的值。 $this 指的是当前实例(例如,如果你调用了$x->func1(),那么$this 将指的是$x)。
    • self 将引用 A,它只是类,而不是特定实例 (x),因此它不知道要使用哪个唯一的属性值集(因为它不知道使用 x 的值而不是说 y)。
    【解决方案2】:

    代替

    $object->func2
    

    $this->func2()
    

    【讨论】:

      【解决方案3】:
      class MyClass{
      
          function func1(){
              ....
              $this->func2()
          }
      
          function func2(){
              ....
          }
      
      }
      

      您可以使用$this 调用类中的内部函数和内部变量

      【讨论】:

        【解决方案4】:

        如果你想从 func1 调用,请使用$this->func2();

        要从课堂外调用,请使用$object->func2();

        但如果您不需要 func2,您可以将代码移动到 func1 的末尾,您可能需要更改 func2 中的一些代码,这是您的选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多