我可以/如何...在 PHP 中调用类外部的受保护函数

2022-08-30 18:40:32

我有一个在某个类中定义的受保护函数。我希望能够在另一个函数中的类之外调用此受保护的函数。这是否可能,如果是这样,我该如何实现它

class cExample{

   protected function funExample(){
   //functional code goes here

   return $someVar
   }//end of function

}//end of class


function outsideFunction(){

//Calls funExample();

}

答案 1

从技术上讲,可以使用反射 API 调用私有和受保护的方法。但是,99%的时间这样做是一个非常糟糕的主意。如果可以修改类,则正确的解决方案可能是公开该方法。毕竟,如果您需要在类之外访问它,那就违背了将其标记为受保护的意义。

下面是一个快速反思示例,以防这是真正必要的极少数情况之一:

<?php
class foo { 
    protected function bar($param){
        echo $param;
    }
}

$r = new ReflectionMethod('foo', 'bar');
$r->setAccessible(true);
$r->invoke(new foo(), "Hello World");

答案 2

这就是 OOP 的要点 - 封装:

私人

Only can be used inside the class. Not inherited by child classes.

保护

Only can be used inside the class and child classes. Inherited by child classes.

公共

Can be used anywhere. Inherited by child classes.

如果仍要在外部触发该函数,可以声明一个触发受保护方法的公共方法:

protected function b(){

}

public function a(){
  $this->b() ;
  //etc
}

推荐