有人告诉我,在 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 :
再次感谢大家。
注意:这是 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/