php - 更多关于 PHP OOP - 类中的类

标签 php oop variables callback scope

有人告诉我,在 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 :

http://codepad.org/tRk0XWG7

再次感谢大家。


注意:这是 follow up .

最佳答案

您可以在函数中声明一个类。这称为条件声明,即只有调用函数时才会声明类。无论您包含带有类声明的文件还是在函数内键入代码,都没有太大区别。

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

您对回调的困惑可以用同样的事情来解释。当第一次执行class_1::function_1时,函数callback_function正在被定义。这是一个常规的全局函数,可以从任何地方调用。它不以任何方式绑定(bind)到类。您还会注意到,您无法再次执行 class_1::function_1,当您尝试再次声明 callback_function 时,PHP 会提示它已存在。

至于源代码中的注释//如何声明这个变量,以便它在我需要的地方可用?:你没有。该变量是函数内的局部变量。它仅在函数内部的范围内。如果您愿意,您可以像任何其他返回值一样从函数中返回其值。 (您可以将其设置为全局,但看在上帝的份上,不要这么做!) 如果您在其他地方需要该值,请不要将其声明为变量内的变量函数,因为只有函数才能访问它。

关于php - 更多关于 PHP OOP - 类中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13471913/

相关文章:

java - 将 CRYPT_RSA_PUBLIC_FORMAT_PKCS1 从 php 转换为 Java 中的 RSA 公钥

php - 从php获取json数组

php - DateTime() 工作错误

C++:无法重新分配类,在线使用默认构造函数

variables - 在 View 之间传递变量 SwiftUI

php - 为什么 Symfony 2 中有两个 Cookie 类?

c# - 创建一个封装通用集合的类有什么缺点吗?

javascript - 我可以控制 ES6 中类的创建方式吗?

variables - Makefile:如何在规则的左侧使用变量?

python - 使用 for 循环创建具有不同名称的变量