Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中,如何从不同类中的另一个类调用函数?_Php_Oop - Fatal编程技术网

在php中,如何从不同类中的另一个类调用函数?

在php中,如何从不同类中的另一个类调用函数?,php,oop,Php,Oop,如何从不同类中的另一个类调用函数 以下是我当前的代码: <?php class database { private $host = "localhost"; private $user = "root"; private $password = ""; private $db = "9dot"; //connect to database public functi

如何从不同类中的另一个类调用函数

以下是我当前的代码:

    <?php

    class database
    {
        private $host = "localhost";
        private $user = "root";
        private $password = "";
        private $db = "9dot";

        //connect to database
        public function connect()
        {
            $connect =  mysql_connect($this->host,$this->user,$this->password);
            $database = mysql_select_db($this->db,$connect);

        }



        //Get exam headers
        public function GetExam()
        {
            $this->connect();
            $select = "SELECT e.ExamHeaderID, CONCAT(e.Firstname,' ',e.Lastname) AS Fullname e.Age, e.Position, e.Date FROM examheader e";
            $result = mysql_query($select);
            $table = "";
            $table .= "<th>ExamID</th>";
            $table .= "<th>Name</th>";
            $table .= "<th>Age</th>";
            $table .= "<th>Position</th>";
            $table .= "<th>Date</th>";

            $exam_id = "";
            $fullname = "";
            $age = "";
            $position = "";
            $date = "";
            while($row = mysql_fetch_array($select))
            {
                $exam_id = mysql_real_escape_string($row['ExamHeaderID']);
                $fullname = mysql_real_escape_string($row['Fullname']);
                $age = mysql_real_escape_string($row['Age']);
                $position = mysql_real_escape_string($row['Position']);
                $date = mysql_real_escape_string($row['Date']);
            }

        }

        public function GetExamDetails($ExamID)
        {
            $this->connect();
            //$select = "SELECT ed.ExamDetailsID, ed.";
        }


        //Save Exam header
        public function SaveExam($firstname,$lastname, $age, $position)
        {
            $this->connect();
            $date = date("m/d/Y");
            mysql_real_escape_string($firstname);
            mysql_real_escape_string($lastname);
            mysql_real_escape_string($age);
            mysql_real_escape_string($position);
            $insert = "INSERT INTO examheader (Firstname,Lastname, Age, Position, Date) VALUES ('$firstname','$lastname','$age','$position')";
            $result = mysql_query($insert);
            $exam_id = mysql_insert_id();
            //return exam id for insertion of exam details
            return $exam_id;

        }

        public function SaveExamAnswer()
        {


        }



    }

?>





<?php

include 'database.php';
$database = new $database();

class department
{
    $database->//property or function
}



?>
尝试类似的方法(粗略示例):


您可以扩展它们

class department extends database {
    function test() {
        $this->getdbfunction();
    }
}
或者你把它们交给构造器:

class department {
    private $db;

    public function __construct(Database db) {
        $this->db = $db
    }
}

$department = new department($database);

创建“database”类型的对象,然后使用以下方法调用该方法:

$database = new database();
$connection = $database->connect();

您可以定义一个属性,该属性是第一个类的实例,然后在第二个类示例中将方法应用于已定义的属性:

class A {
function a () {
}
...
}

class B {
$attClassA;
function __construct(A objA) {
$this->attClassA = objA;
}
// you can use the attClassA in any class you want and then apply the chosen method
...
}

您可以在department类中声明数据库实例,如下所示:

class department
{
    public function __construct() 
    {
        $database = new database();
        $database->someFunction();
    }
}
include 'database.php'

$database = new database();

class department
{
    public function __construct() 
    {
        global $database;
        $database->someFunction();
    }
}
如果您不想直接在department类中使用它,您可以使用
全局
系统声明它,假设包含所需的文件,如下所示:

class department
{
    public function __construct() 
    {
        $database = new database();
        $database->someFunction();
    }
}
include 'database.php'

$database = new database();

class department
{
    public function __construct() 
    {
        global $database;
        $database->someFunction();
    }
}

请参见您可以这样做:

如果不想手动包含PHP文件,请使用spl\u autoload\u register()函数 否则,您需要包含PHP文件,该文件包含要从中导入方法的类

file-A.php-包含类A的php文件

<?php

class A{

   function DoSquare($x){
      return $x*$x;
    }

}

?>


file-B.php-包含类B的php文件

假设您使用的是spl_autoload_register():


如果手动包含PHP文件:

<?php

require("file-A.php");

class B{
   
   private $ObjectA = NULL;

   public function __construct(){
        $this->ObjectA = new A();
    }

   public function PrintSquare($x){
       echo $this->ObjectA->DoSquare($x);      
   }

}
?>


不要鼓励人们使用
global
!我不鼓励他使用它,我只是告诉他,这也是他想做什么的另一种方式,即使这不是最正确的方式。在大多数人看来,依赖注入方法是首选方法;)当您查看性能时,您应该查看并使用设计模式,因此这个示例非常简单。