我被告知在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。
答案 0 :(得分:3)
您可以在函数中声明一个类。这就是所谓的条件声明,即只有在调用该函数时才会声明该类。那么你是include
一个带有类声明的文件,或者你是否在函数内输入代码,这并没有什么区别。
但这并不意味着类共享任何类型的范围或数据。只有声明是有条件嵌套的,它仍然具有与explained before相同的功能和范围。
你对回调的困惑可以解释同样的事情。第一次执行class_1::function_1
时,正在定义function callback_function
。这是一个可以从任何地方调用的常规全局函数。它不以任何方式绑定到班级。您还会注意到,您无法再次执行class_1::function_1
,当您尝试再次声明时,PHP会抱怨callback_function
已经存在。
至于源代码//How do I declare this variable so that it is available where I need it?
中的评论:你没有。该变量是函数内的局部变量。它只在函数范围内。如果您愿意,您可以像使用任何其他返回值一样return
其值。 (你可以把它global
,但是对于上帝的爱不要!)如果你需要其他地方的值,不要将它声明为函数内的变量,因为只有函数可以访问它。
答案 1 :(得分:1)
你会在几个地方返回$missing_variable
。见下文。 (请注意,这不是唯一的方法)
<?
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;