PHP:跨文件在B类中调用A类非静态方法a的实现问题
在PHP中跨类调用非静态方法的解决方案
你当前的代码里直接写a($string)是错误的——a是A类的非静态方法,不能像全局函数那样直接调用,必须通过A类的实例对象来访问。下面给你两种可行的解决方式:
方式一:实例化A类对象调用方法
这是最常规的处理方式,适合方法a依赖A类实例属性的场景:
修改b.php的代码如下:
//file : b.php require_once('a.php'); class B { public function b($string) { // 先创建A类的实例对象 $aObj = new A(); // 通过实例对象调用非静态方法a $string = $aObj->a($string); return $string; } }
方式二:将A类的方法改为静态方法(可选)
如果方法a不需要依赖A类的实例属性(比如不需要用到$this访问类内成员),可以把它改成静态方法,这样无需实例化就能调用:
第一步修改a.php:
//file : a.php class A { public static function a($string) { $string .= $string; return $string; } }
第二步修改b.php:
//file : b.php require_once('a.php'); class B { public function b($string) { // 通过类名直接调用静态方法 $string = A::a($string); return $string; } }
注意:如果方法a里用到了A类的非静态成员(比如$this->someProperty),就只能用第一种方式,静态方法无法访问非静态的类成员。
内容的提问来源于stack exchange,提问作者Yurin Jerenae
相关产品推荐
相关产品推荐

