如何在PHP中访问另一个类的私有函数[重复]
Posted
技术标签:
【中文标题】如何在PHP中访问另一个类的私有函数[重复]【英文标题】:How to acess Private function of another class in PHP [duplicate] 【发布时间】:2016-01-25 10:20:37 【问题描述】:我有一个 dbHandeller.php 文件。如下
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)
然后我有 donation.php 并且它扩展了 DB 类
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()
当我尝试访问 donation
类时,出现以下错误
<br />
<b>Fatal error</b>: Call to private method dbHandeler::initiatedb() from context 'donation' in <b>C:\xampp\htdocs\templeform\api\donation.php</b> on line <b>13</b><br />
error
【问题讨论】:
他们是private
对吧?
@RayonDabre 是的,所以如果我要扩展课程,那么我应该能够访问私有课程吧?
使用Reflection
做同样的事情。
把方法改成protected
,这样扩展类就可以访问了
你不能访问父类之外的私有函数,你必须了解公共、私有和受保护函数之间的区别。
【参考方案1】:
“private” 访问说明符只能在定义它的类中使用,您不能从定义它的类外部调用它,即使是从子类也是如此。您也许可以改用 "protected" 访问说明符,它也可用于子类,但不能用于其他类。希望这可以帮助。
【讨论】:
最好将此信息添加为评论,它不能被视为答案 @Insomania 他不能发布具有 1 声望的 cmets 感谢@dave 对他讲道理【参考方案2】:如果方法是私有的,那是有原因的,为什么方法是私有的。私有函数只能在类内部调用。如果该方法应该在继承的类中可用,则应将该函数标记为受保护。 如果函数应该可以从任何地方访问,它必须是公共的。
如果您想更改该功能的可访问性,您可以使用ReflectionMethod::setAccessible
进行更改 - 但这样做通常是一个糟糕设计的良好指标。
$method = new ReflectionMethod('dbHandeler', 'sql_query');
$method->setAccessible(true);
如果你不想改变可访问性,你也可以使用反射直接调用方法,这可能是更好的选择。
尽管如此,您还是应该认真考虑您的设计。如果这是您自己的类,为什么不将函数标记为 public 或 protected?
【讨论】:
以上是关于如何在PHP中访问另一个类的私有函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章