从PHP中的其他类访问函数

时间:2018-06-22 23:20:30

标签: php

我有3个文件。 utils.php (包含功能 statusDefaultMessage()), userdetails.php (包含功能 insertOwner()),和 insertCreateUser.php 。我想在userdetails.php中调用statusDefaultMessage(),但是我不知道怎么做。我已经省略了不必要的代码以避免拥挤,但是下面是我正在使用的代码片段。

// utils.php
<?php

class Utils{

    // database connection and table name
    private $conn;

    // constructor with $db as database connection
    public function __construct($db) {
        $this->conn = $db;
    }

    // function to be called in another class
    public function statusDefaultMessage($code, $msg) {
        $data=array();
        $data = array(
                "response_code" => $code,
                "status" => $msg
            );
        return $data;
    }

}

?>

// userdetails.php
<?php

// include database and object files
include_once '../objects/utils.php';

class UserDetails{

    // database connection and table name
    private $conn;
    private $userdetails_table = "userdetails";

    // constructor with $db as database connection
    public function __construct($db){
        $this->conn = $db;
    }

    $utils = new Utils();

    public function insertOwner($user_group_id, $name, $email_id, $enc_pass, $mobile_no, $company_id, $created_by, $status) {
        $data=array();
        if (($created_by==null && $status==0)) {
            // query to insert record
            $sql = "INSERT into ".$this->userdetails_table." (user_group_id, name, email_id, password, mobile_no, company_id) values(".$user_group_id.", '".$name."', '".$email_id."', '".$enc_pass."', '".$mobile_no."', '".$company_id."');";
            if($this->conn->exec($sql)){
                $data = $utils->statusDefaultMessage("1", "Signup successful!");
            } else {
                $data = $utils->statusDefaultMessage("0", "Signup failed!");
            }
        }
        return $data;
    }

}

?>

// insertCreateUser.php
<?php

// include database and object files
include_once '../config/database.php';
include_once '../objects/utils.php';
include_once '../objects/userdetails.php';

// instantiate database and product object
$database = new Database();
$db = $database->getConnection();

$utils = new Utils($db);
$userdetails = new UserDetails($db);

// assign necessary tables
$companies_table = "companies";

$company_name = isset($_POST['company_name']) ? $_POST['company_name']:"";

// Example of how I intend to use the functions from userdetails.php and utils.php
$sql = "INSERT into ".$companies_table." (company_name) values('".$company_name."');";
if($db->exec($sql)) {

    $data = $userdetails->insertOwner($user_group_id, $name, $email_id, $enc_pass, $mobile_no, $company_id, $created_by, $status);

} else {

    $data = $utils->statusDefaultMessage("0", "Company not inserted!");

}

//end
echo json_encode($data);

?>

我正面临语法错误问题,如果有人可以向正确的方向指导我,将不胜感激。同样,我希望能够在userdetails.php中使用功能statusDefaultMessage()。谢谢。

<br />
<b>Parse error</b>:  syntax error, unexpected '$utils' (T_VARIABLE), expecting function (T_FUNCTION) in <b>C:\xampp\htdocs\esecurity_repo\objects\userdetails.php</b> on line <b>19</b><br />

3 个答案:

答案 0 :(得分:2)

我不确定这是否是您遇到的语法错误,但是您不能拥有它

$utils = new Utils();

UserDetails类的中间。它必须在insertOwner方法内部。

答案 1 :(得分:1)

userdetails.php中,您尝试在函数$utils中使用insertOwner(),但其中没有作用域。

尝试将此行放在函数$utils = new Utils();

答案 2 :(得分:1)

如前所述,您不能在类中间声明$utils = new Utils();(因此会出现错误)。

根据您的代码,看起来您正在调用的函数不依赖于Utils对象的任何内部状态,因此在这种情况下,您可以将其设为静态函数(因此无需创建实例)

// Declaring it in your Utils class:
class Utils {

    // <other code>

    public static function statusDefaultMessage($code, $msg) { ... }
}


// Calling it in your user details class (or anywhere, really):
Utils::statusDefaultMessage('foo', 'bar');

如果 do 需要访问Utils对象的内部状态(可能用于其他方法),则可能应将该实例作为变量传递给构造函数(同样的方法)您现在正在使用$db)或作为需要使用它的函数的参数。