【发布时间】: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,这样扩展类就可以访问了 -
你不能访问父类之外的私有函数,你必须了解公共、私有和受保护函数之间的区别。