我有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 />
答案 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
)或作为需要使用它的函数的参数。