How to acess Private function of another class in PHP
本问题已经有最佳答案,请猛点这里访问。
我有一个dbhandeller.php文件。如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | class dbHandeler { var $conn; public function __construct(){ $this->initiatedb(); } private function initiatedb(){ //Details of the Databse $servername ="localhost"; $username ="root"; $password =""; $dbname ="xxxxxx"; // Create connection $this->conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$this->conn) { die("Connection failed:" . mysqli_connect_error()); }else return $this->conn; } private function sql_query($query){ } } |
然后我有捐赠.php,它扩展了db类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function __autoload($class_name) { include $class_name . '.php'; } class donation extends dbHandeler{ public function __construct(){ $dbObj = new dbHandeler(); $dbObj->initiatedb(); } public function putDonation(){ var_dump($_POST); } public function getDonation(){ } } |
当我试图访问
1 2 3 4 | <br /> Fatal error: Call to private method dbHandeler::initiatedb() from context 'donation' in C:\xampp\htdocs\templeform\api\donation.php on line 13<br /> error |
"private"访问说明符只在它定义的类中可用,不能从它定义的类外部调用它,甚至不能从子类调用它。您可以使用"受保护的"访问说明符来代替,它也可以用于子类,但不能用于其他类。希望这有帮助。
如果方法是私有的,那么有一个原因,就是为什么该方法是私有的。只能在类内部调用私有函数。如果方法在继承的类中可用,则应将函数标记为受保护的。如果该功能应该可以从任何地方访问,那么它必须是公共的。
如果要更改函数的可访问性,可以使用
1 2 | $method = new ReflectionMethod('dbHandeler', 'sql_query'); $method->setAccessible(true); |
如果不想更改可访问性,也可以使用反射直接调用方法,这可能是更好的选择。
不过,你真的应该考虑一下你的设计。如果这是您自己的类,为什么不将该函数标记为public或protected?