Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类初始化错误:调用非对象上的成员函数?_Php - Fatal编程技术网

Php 类初始化错误:调用非对象上的成员函数?

Php 类初始化错误:调用非对象上的成员函数?,php,Php,我的班级模式如下: class Foo { private $date; public function set_date($date) { $this->date = $date; } // ANSWER: this gets executed as a constructor (case-insensitive) public function foo() { print_r($this->date->

我的班级模式如下:

class Foo {
    private $date;
    public function set_date($date) {
        $this->date = $date;
    }

    // ANSWER: this gets executed as a constructor (case-insensitive)
    public function foo() {
        print_r($this->date->format('Y'));
    }
}

$Foo = new Foo();
我得到:
致命错误:调用
newfoo()
时,对非对象调用成员函数format()

我无法重现错误(上面的代码似乎有效)


以上代码现在是错误的精确副本。

这是一个语法错误:

print_r($this->Date->format('Y');
                              ^^^^  missing closing paren

可能还执行了其他代码。方法
format
在方法
b
中调用
b
在您给出的代码中没有被调用,但它可能在其他地方被调用,并且在日期设置之前。

因为错误发生在您使用
new Foo()
创建类实例时,我怀疑类中存在方法
Foo()
。因为没有
\u construct()
方法
foo()
被视为构造函数并执行。这可能会直接或通过调用其他方法触发错误。

您的类是否有_构造函数?不,没有。我必须用日期构造类吗?这是您正在使用的完整类还是示例?您编写了“上述代码似乎有效”,这是否意味着这不是产生错误的代码?不。除非您需要初始化变量,否则不需要构造函数。请不要使用以大写字母开头的变量名。类名以大写开头。我现在看到@Madbreaks答案。他对语法错误的看法是正确的,也许它们愚弄了PHP解析器,导致format方法作为单独的语句执行。首先修复语法错误,如果问题仍然存在,只查找对
b
的调用。:)必须是
函数Foo()
(cap-F)不是吗?不确定,让我测试一下。不管大写与否,它都会执行@Madbreaks:我刚刚检查过,即使案例不匹配,它仍然被认为是构造函数。@Arjan感谢您的确认