更多关于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
,但是对于上帝的爱不要!)如果你在别的地方需要这个值,不要把它声明为一个函数内的变量,因为只有函数可以访问它。
上一篇: More About PHP OOP
下一篇: How can I use a callback function which is stored as a class member in PHP?