PHP Class 未找到但它在文件夹中并且也包括在内
PHP Class not found but it's in folder and it is also included
我有一个独特的问题...如果我以这种方式包含文件:
<?php
session_start();
session_regenerate_id();
foreach (glob("../class/*.php") as $filename)
{
echo "$filename\n";
include $filename;
}
foreach (glob("../utilities/*.php") as $filename) {
echo "$filename\n";
include $filename;
}
class ECommerce {
private $checker;
private $errorManager;
/**
* ECommerce constructor.
*/
function __construct() {
$this->checker = new Checker();
$this->errorManager = new ErrorManager();
}
网站打不开,我什么时候能打
$ecommerce = new ECommerce();
它说
Class 'ErrorManager' not found in path
当我想尝试这个时,我想到了什么:
<?php
session_start();
session_regenerate_id();
include "../class/Checker.php";
include "../class/User.php";
include "../utilities/ErrorManager.php";
class ECommerce {
private $checker;
private $errorManager;
/**
* ECommerce constructor.
*/
function __construct() {
$this->checker = new Checker();
$this->errorManager = new ErrorManager();
}
以这种方式,它可以正常工作,任何事情都可以做它必须做的事情!
"why" 这个问题在我内心根深蒂固,我无法入睡(真的)。
为什么第一种方式适用于除 ErrorManager 之外的所有 classes?
先谢谢了!
这里有 ErrorManager class 代码(它有像 Checker class 一样的空白结构)
<?php
class ErrorManager
{
function __construct() {
}
function getErrorUserNameNotValid() {
return "Nome inserito non valido";
}
function getErrorUserSurnameNotValid() {
return "Cognome inserito non valido";
}
function getErrorUserEmailAlreadyExists() {
return "Email inserita non valida!";
}
function getErrorUserEmailNotValid() {
return "Email inserita non valida!";
}
function getErrorUserPasswordNotValid() {
return "Password inserita non valida! Inserisci una password che sia lunga tra i 6 e i 50 caratteri!";
}
function getErrorUserAddressNotValid() {
return "Indirizzo inserito non valido!";
}
function getErrorUserPhoneNumberNotValid() {
return "Numero telefonico inserito non valido! Inserisci solo numeri, senza trattini o caratteri speciali!";
}
}
我也附上了文件夹的截图
我正在尝试使用 AutoLoader:
这是电子商务 class:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
这是在 MyAutoloaderClass 中
class MyAutoloader
{
public static function ClassLoader($className)
{
$path = "../class/";
include $path.$className.'.php';
}
public static function LibraryLoader($className)
{
$path = __DIR__."/";
include $path.$className.'.php';
}
}
上面写着
include(../class/ErrorManager.php): failed to open stream: No such file or directory in
相对路径上的 include
将根据被调用的 PHP 脚本的路径搜索文件,而不是您正在从中调用 include 的包含的 PHP 文件。
即使您的电子商务 class 从不同的位置使用也能包含在内,请尝试
include __DIR__ . '/' . $filename;
在较旧的 PHP 版本中,您可以使用 dirname(__FILE__)
而不是 __DIR__
。
在 ErrorManager.php
加载之前可能还有其他依赖项,例如在 Dispatcher.php
.
如果你测试以下会发生什么?
include "../class/Checker.php";
include "../class/User.php";
include "../utilities/Dispatcher.php";
include "../utilities/ErrorManager.php";
考虑使用像 spl_autoload_register 这样的 class 加载机制。它使 class 依赖管理更容易。
我有一个独特的问题...如果我以这种方式包含文件:
<?php
session_start();
session_regenerate_id();
foreach (glob("../class/*.php") as $filename)
{
echo "$filename\n";
include $filename;
}
foreach (glob("../utilities/*.php") as $filename) {
echo "$filename\n";
include $filename;
}
class ECommerce {
private $checker;
private $errorManager;
/**
* ECommerce constructor.
*/
function __construct() {
$this->checker = new Checker();
$this->errorManager = new ErrorManager();
}
网站打不开,我什么时候能打
$ecommerce = new ECommerce();
它说
Class 'ErrorManager' not found in path
当我想尝试这个时,我想到了什么:
<?php
session_start();
session_regenerate_id();
include "../class/Checker.php";
include "../class/User.php";
include "../utilities/ErrorManager.php";
class ECommerce {
private $checker;
private $errorManager;
/**
* ECommerce constructor.
*/
function __construct() {
$this->checker = new Checker();
$this->errorManager = new ErrorManager();
}
以这种方式,它可以正常工作,任何事情都可以做它必须做的事情!
"why" 这个问题在我内心根深蒂固,我无法入睡(真的)。
为什么第一种方式适用于除 ErrorManager 之外的所有 classes?
先谢谢了!
这里有 ErrorManager class 代码(它有像 Checker class 一样的空白结构)
<?php
class ErrorManager
{
function __construct() {
}
function getErrorUserNameNotValid() {
return "Nome inserito non valido";
}
function getErrorUserSurnameNotValid() {
return "Cognome inserito non valido";
}
function getErrorUserEmailAlreadyExists() {
return "Email inserita non valida!";
}
function getErrorUserEmailNotValid() {
return "Email inserita non valida!";
}
function getErrorUserPasswordNotValid() {
return "Password inserita non valida! Inserisci una password che sia lunga tra i 6 e i 50 caratteri!";
}
function getErrorUserAddressNotValid() {
return "Indirizzo inserito non valido!";
}
function getErrorUserPhoneNumberNotValid() {
return "Numero telefonico inserito non valido! Inserisci solo numeri, senza trattini o caratteri speciali!";
}
}
我也附上了文件夹的截图
我正在尝试使用 AutoLoader:
这是电子商务 class:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
这是在 MyAutoloaderClass 中
class MyAutoloader
{
public static function ClassLoader($className)
{
$path = "../class/";
include $path.$className.'.php';
}
public static function LibraryLoader($className)
{
$path = __DIR__."/";
include $path.$className.'.php';
}
}
上面写着
include(../class/ErrorManager.php): failed to open stream: No such file or directory in
include
将根据被调用的 PHP 脚本的路径搜索文件,而不是您正在从中调用 include 的包含的 PHP 文件。
即使您的电子商务 class 从不同的位置使用也能包含在内,请尝试
include __DIR__ . '/' . $filename;
在较旧的 PHP 版本中,您可以使用 dirname(__FILE__)
而不是 __DIR__
。
在 ErrorManager.php
加载之前可能还有其他依赖项,例如在 Dispatcher.php
.
如果你测试以下会发生什么?
include "../class/Checker.php";
include "../class/User.php";
include "../utilities/Dispatcher.php";
include "../utilities/ErrorManager.php";
考虑使用像 spl_autoload_register 这样的 class 加载机制。它使 class 依赖管理更容易。