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