php类的默认执行顺序是什么?

时间:2014-05-26 12:49:47

标签: php

我试图确保我理解PHP类的默认行为。如果没有指定函数调用,那么类会自动按顺序执行公共函数吗?

解释

我正在使用我没有创建的PHP类。设置了许多私有变量,后跟__construct函数,它是公共的。

__construct中没有明确调用另一个函数。它将外部配置与Class config合并。

下一个公共函数称为generateOutput()。没有显式调用该函数,但根据我的输出日志,它是下一个执行的函数。

我只是想确定我理解订单并且不确定公共功能会自动执行。我一直认为__construct只是因为它有一个特定的名称。

答案

从php片段中需要一次外部类文件,并创建新的类实例。该片段返回该函数的输出。

require_once($classfile);
try{
    $handler = new EasyPoll($config,$lang);
    return $handler->generateOutput(); //BINGO!
}

感谢您的帮助。它绝对让我的脑袋直线了!

2 个答案:

答案 0 :(得分:1)

这个类是继承自另一个吗?在那种情况下可能有意义,因为扩展类不是调用generateOutput(),而是父类是(并且你没有覆盖那种行为)。

答案 1 :(得分:1)

必须有一些你没有注意到的东西。创建类时,没有(默认情况下)调用除__construct之外的方法。但是,请考虑以下情形:

class A {
    private $b = null;
    public function __construct() {
        $this->x = new B($this);
    }
    public function fn() {
        echo "HA!<br />\n";
    }
 }
 class B {
    public function __construct(A $owner) {
        $owner->fn();
    }
 }
 //Code:
 $a = new A();  //Outputs "HA!"

我想要证明的是,你没有写的代码可能是模糊不清的,并且做了许多 magic

另一个可能性:

class A {
    private $b = null;
    public function __construct() {
        $this->fn();
    }
    public function fn() {
        echo "HA!<br />\n";
    }
 }
 class B extends A {
    public function __construct() {
        parent::__construct();
    }
 }
 //And the execution:
 $b = new B(); //Again outputs A