调用类A静态方法something触发Uncaught Error错误,求解决方案
解决调用类A的something方法时的错误
你的错误Uncaught Error: Class name must be a valid object or a string主要由两个问题导致,我们一步步来修复:
- 静态方法错误使用实例属性:你的
something()被声明为static方法,但里面尝试用$this->a和$this->b访问实例属性。静态方法属于类本身,不属于任何具体实例,所以$this在静态方法中不存在,而且私有实例属性也不能被静态方法直接访问。 - 可能的调用方式错误:如果你的调用代码存在写法问题(比如用未定义的变量指代类名、用字符串类名直接调用实例方法),也会触发这个类名错误。
修复方案
根据你的需求,分两种场景给出修复代码:
场景1:something()不需要是静态方法
如果这个方法需要访问实例的$a和$b,去掉static关键字改成实例方法,通过类实例调用:
class A { private $a; private $b; function __construct($a, $b){ $this->a = ($a == NULL) ? ' something' : $a; $this->b = ($b == NULL) ? ' something' : $b; echo($this->a); } private function geta(){ return $this->a; } private function getb(){ return $this->b; } // 移除static关键字,改为实例方法 public function something(){ echo $this->a; echo $this->b; // ... 你的其他代码 } }
正确调用方式:
// 实例化类A $obj = new A('test_a', 'test_b'); // 调用实例方法 $obj->something();
场景2:something()必须是静态方法
如果这个方法必须保持静态,需要把$a和$b改为静态属性,并用self::访问:
class A { // 改为静态私有属性 private static $a; private static $b; function __construct($a, $b){ self::$a = ($a == NULL) ? ' something' : $a; self::$b = ($b == NULL) ? ' something' : $b; echo(self::$a); } private static function geta(){ return self::$a; } private static function getb(){ return self::$b; } public static function something(){ // 使用self::访问静态属性 echo self::$a; echo self::$b; // ... 你的其他代码 } }
正确调用方式:
// 先实例化以初始化静态属性(根据需求调整) new A('test_a', 'test_b'); // 通过类名调用静态方法 A::something();
额外提醒
- 私有属性/方法仅能在类内部访问,若需外部访问,可将其改为
protected/public,或提供公共的getter方法(目前你的geta/getb是private,外部无法调用)。 - 调用类时确保类名拼写正确,若用变量指代类名,需使用
$class::something()而非$class->something()(字符串类名无法直接调用实例方法)。
内容的提问来源于stack exchange,提问作者DarkFlameNinja
相关产品推荐
相关产品推荐

