无法在常规 php 文件中导入 PHP class
can't import PHP class in a regular php file
我正在尝试用原生 php 构建一个儿子 api。
我使用 类 创建了一个结构,现在我正尝试在常规 php 文件中使用这些 类,该文件将使用 http 客户端从外部调用。
问题是我无法从那些 类 中实例化新对象,当我执行所有操作时,我无法继续执行我的文件。
user.php :
use Actions\Users\UserMethods;
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
try{
$Methods = new UserMethods();
if($_GET["id"]!==null){
$user = $Methods->getUser($_GET["id"]);
var_dump($user);
echo json_encode(['user'=>$user]);
}
}catch (Exception $exception){
returnError($exception->getMessage());
}
}
我可以在分配 $Methods 之类的地方之前转储任何内容,但是在我分配之后没有任何效果。
用户方法Class:
namespace Actions\Users;
use Models\UserModel;
use database\dbconnect;
use Constants\DbConfig;
class UserMethods
{
private $DataBase;
private $userValidator;
/**
* UserMethods constructor.
*/
public function __construct()
{
try{
$this->userValidator = new UserValidator();
$this->DataBase = new dbconnect(DbConfig::$BD_HOST.":".DbConfig::$DB_PORT,
DbConfig::$DB_USERNAME,DbConfig::$DB_PASSWORD,DbConfig::$DB_DBNAME);
}catch(\Exception $exception){
var_dump($exception);
}
}
public function createUser(UserModel $userModel){
try{
$this->userValidator->validate($userModel);
$name=$userModel->getName();
$email= $userModel->getEmail();
$sqlQuery="Insert into users(email,name) values ($$email,$$name)";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function updateUser(UserModel $userModel){
try{
$this->userValidator->validate($userModel);
$name=$userModel->getName();
$email= $userModel->getEmail();
$id=$userModel->getId();
$sqlQuery="
UPDATE users
SET
name = $$name,
email = $$email,
...
WHERE
id=$$id;
";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function deleteUser($id){
try{
$sqlQuery="
DELETE FROM users
WHERE
id=$$id;
";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function getUser($id){
try{
$sqlQuery="
SELECT id,name,email
FROM users
WHERE id=$$id
ORDER BY id ASC
";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function getAllUsers(){
$sqlQuery="
SELECT id,name,email
FROM users
ORDER BY id ASC
";
return $this->handleQuery($sqlQuery);
}
private function handleQuery($query){
$MysqlDb = $this->DataBase->connect();
return $MysqlDb->query($query);
}
}
可能是什么问题?
您似乎错过了文件的导入。
当使用命名空间时,为了使导入几乎是自动的,最好实现一个自动加载器,我建议检查如何 enable autoloading using composer
如果您的 class 文件很少,您可以避免使用自动加载器,而是手动导入每个 class,在这种情况下,您应该:
require UserMethods.php
在您的 User.php 文件的开头。
包括自动加载功能或添加 require('pathToClass/ClassName.php') 尝试正确的路径名称空间大小字母。
我正在尝试用原生 php 构建一个儿子 api。 我使用 类 创建了一个结构,现在我正尝试在常规 php 文件中使用这些 类,该文件将使用 http 客户端从外部调用。
问题是我无法从那些 类 中实例化新对象,当我执行所有操作时,我无法继续执行我的文件。
user.php :
use Actions\Users\UserMethods;
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
try{
$Methods = new UserMethods();
if($_GET["id"]!==null){
$user = $Methods->getUser($_GET["id"]);
var_dump($user);
echo json_encode(['user'=>$user]);
}
}catch (Exception $exception){
returnError($exception->getMessage());
}
}
我可以在分配 $Methods 之类的地方之前转储任何内容,但是在我分配之后没有任何效果。
用户方法Class:
namespace Actions\Users;
use Models\UserModel;
use database\dbconnect;
use Constants\DbConfig;
class UserMethods
{
private $DataBase;
private $userValidator;
/**
* UserMethods constructor.
*/
public function __construct()
{
try{
$this->userValidator = new UserValidator();
$this->DataBase = new dbconnect(DbConfig::$BD_HOST.":".DbConfig::$DB_PORT,
DbConfig::$DB_USERNAME,DbConfig::$DB_PASSWORD,DbConfig::$DB_DBNAME);
}catch(\Exception $exception){
var_dump($exception);
}
}
public function createUser(UserModel $userModel){
try{
$this->userValidator->validate($userModel);
$name=$userModel->getName();
$email= $userModel->getEmail();
$sqlQuery="Insert into users(email,name) values ($$email,$$name)";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function updateUser(UserModel $userModel){
try{
$this->userValidator->validate($userModel);
$name=$userModel->getName();
$email= $userModel->getEmail();
$id=$userModel->getId();
$sqlQuery="
UPDATE users
SET
name = $$name,
email = $$email,
...
WHERE
id=$$id;
";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function deleteUser($id){
try{
$sqlQuery="
DELETE FROM users
WHERE
id=$$id;
";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function getUser($id){
try{
$sqlQuery="
SELECT id,name,email
FROM users
WHERE id=$$id
ORDER BY id ASC
";
return $this->handleQuery($sqlQuery);
}catch(\Exception $exception){
throw $exception;
}
}
public function getAllUsers(){
$sqlQuery="
SELECT id,name,email
FROM users
ORDER BY id ASC
";
return $this->handleQuery($sqlQuery);
}
private function handleQuery($query){
$MysqlDb = $this->DataBase->connect();
return $MysqlDb->query($query);
}
}
可能是什么问题?
您似乎错过了文件的导入。 当使用命名空间时,为了使导入几乎是自动的,最好实现一个自动加载器,我建议检查如何 enable autoloading using composer
如果您的 class 文件很少,您可以避免使用自动加载器,而是手动导入每个 class,在这种情况下,您应该:
require UserMethods.php
在您的 User.php 文件的开头。
包括自动加载功能或添加 require('pathToClass/ClassName.php') 尝试正确的路径名称空间大小字母。