我遇到了以下问题
class class_name {
function b() {
// do something
}
function c() {
function a() {
// call function b();
}
}
}
当我像往常一样调用函数时:$ this-> b();我收到此错误:在C:...
中不在对象上下文中时使用$ this函数b()声明为public
有什么想法吗?
我会感激任何帮助
由于
答案 0 :(得分:7)
函数a()
在方法c()
内声明。
<?php
class class_name {
function b() {
echo 'test';
}
function c() {
}
function a() {
$this->b();
}
}
$c = new class_name;
$c->a(); // Outputs "test" from the "echo 'test';" call above.
在方法中使用函数的示例(不推荐)
原始代码无效的原因是因为变量的范围。 $this
仅在类的实例中可用。函数a()
不再是其中的一部分,因此解决问题的唯一方法是将实例作为变量传递给类。
<?php
class class_name {
function b() {
echo 'test';
}
function c() {
// This function belongs inside method "c". It accepts a single parameter which is meant to be an instance of "class_name".
function a($that) {
$that->b();
}
// Call the "a" function and pass an instance of "$this" by reference.
a(&$this);
}
}
$c = new class_name;
$c->c(); // Outputs "test" from the "echo 'test';" call above.