更多关于PHP OOP

我被告知一个类不能在PHP中的类中定义。 然而,在我自己的例子中,这似乎工作,让我感到困惑:

class_test.php:

require('class_1.php');
new class_1
//Need $missing_variable here.

class_1.php

class class_1{
    public function function_1(){
        function callback_function(){
            echo "A Callback";
            $missing_variable = "Where Did I Go?";
        }
        require('class_2.php');
        new class_2('callback_function');
    }
    public function __construct(){
        $this->function_1();
    }
}

class_2.php

class class_2{
    public function __construct($callback){
        echo "Hello World - ";
        call_user_func($callback);
    }
}

加载class_test.php打印出来

Hello World - A Callback

问题 :如何定义$missing_variable ,以便我可以在需要的地方获取它?


如果将来有人有类似的问题,但不太可能是这样,我想链接到下面的键盘,显示类外部的$ missing_variable echo'd:

http://codepad.org/tRk0XWG7

再次感谢大家。


注意:这是一个后续。


你会在几个地方返回$missing_variable 。 见下文。 (这不是唯一的方法,请介意)

http://codepad.org/tf08Vgdx

<?
class class_2{
    public function __construct($callback){
        echo "Hello World - ";
        $missing = $callback();
        $this->missing = $missing;
    }
}
class class_1{
    public function function_1(){
        function callback_function(){
            echo "A Callback. ";
            $missing_variable = "Where Did I Go?";
            return $missing_variable;
        }
        $class2 = new class_2('callback_function');
        return $class2->missing;
    }
    public function __construct(){
        $this->missing = $this->function_1();
    }
}

$class = new class_1();

echo $class->missing;

你可以在一个函数中声明一个类。 这就是所谓的条件声明,即只有在函数被调用时才会声明该类。 不管你是用类声明include一个文件,还是在函数内输入代码,它都没有多大区别。

但这并不意味着这些类共享任何类型的范围或数据。 只有声明是有条件嵌套的,它仍然具有与前面解释的相同的功能和范围。

你对这个回调的困惑可以用同样的东西来解释。 第一次执行class_1::function_1时, function callback_function正在被定义。 这是一个常规的全球功能,可以从任何地方调用。 它不以任何方式与班级绑定。 您还会注意到,您不能class_1::function_1执行class_1::function_1 ,PHP会抱怨当您尝试再次声明时, callback_function已存在。

至于源代码中的评论//How do I declare this variable so that it is available where I need it? :你没有。 该变量是函数内的局部变量。 它只在函数的范围内。 您可以return从功能就像任何其他的返回值的值,如果你想。 (你可以使它成为global ,但是对于上帝的爱不要!)如果你在别的地方需要这个值,不要把它声明为一个函数内的变量,因为只有函数可以访问它。

链接地址: http://www.djcxy.com/p/57941.html

上一篇: More About PHP OOP

下一篇: How can I use a callback function which is stored as a class member in PHP?