如何访问PHP中另一个类的私有函数

时间:2015-10-26 10:41:00

标签: php class oop

我有一个 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 ,它扩展了数据库类

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

2 个答案:

答案 0 :(得分:6)

&#34; private&#34; 访问说明符只能在它定义的类中使用,你不能从它定义的类之外调用它,即使是从儿童班。您可以使用&#34; protected&#34; 访问说明符,这些说明符也可用于子类,但不能用于其他类。希望这可以帮助。

答案 1 :(得分:0)

如果方法是私有的,那么有一个原因,为什么该方法是私有的。私有函数只能在类中调用。如果该方法应该在继承的类中可用,则应将该函数标记为protected。 如果该功能应该可以从任何地方访问,那么它必须是公开的。

如果你想改变这个功能的可访问性,你可以用ReflectionMethod::setAccessible来改变它 - 但这样做通常是设计糟糕的一个很好的指标。

$method = new ReflectionMethod('dbHandeler', 'sql_query');
$method->setAccessible(true);

如果你不想改变辅助功能,你也可以使用反射直接调用方法,这可能是更好的选择。

然而你应该考虑你的设计。如果这是你自己的类,你为什么不把这个函数标记为public或protected?

相关问题