php Class 即使在 require_once 文件中也找不到
php Class not found even in require_once file
我有一个奇怪的问题。其 Plans.php 文件中有一些计划 class 包含在主 php 中,但似乎未被系统加载。
看,这是action.php文件
<?php
// action.php gets 3 parameters:
// - CONTROLLER: one on AUTH, SYSTEM, USER, ADS
// - ACTIVITY: one on LOGIN, PLANS, CONTACTS, GUESTS, CONFIG, MESSAGES
// - ACTION: LIST, VIEW, EDIT, INSERT, UPDATE
include './config/config.php';
include './utils/Connect_db.php';
require_once './model/Plans.php';
require_once './controllers/MainController.php';
require_once './controllers/AuthController.php';
require_once './controllers/UserController.php';
require_once './classes/ValidateUser.php';
if (class_exists('Plans')) {
error_log('action: Plans exists');
} else {
error_log('action: Plans NOT exists');
}
if (class_exists('AuthController')) {
error_log('action: AuthController exists');
} else {
error_log('action: AuthController NOT exists');
}
$main = new MainController();
?>
我放了一些 class_exists 函数来检查 Plans class 是否加载。
这是 error_log 文件输出:
[13-Feb-2015 01:04:39 Europe/Brussels] action: Plans NOT exists
[13-Feb-2015 01:04:39 Europe/Brussels] action: AuthController exists
显然以后使用计划 class 会导致 计划 class 未找到
这是我的 Plans.php 文件:
<?php
class Plans {
private $_con;
private $_sql;
function __construct($users_id, $plans_id) {
$this->_con = Connect_db();
switch(func_num_args()) {
case 0:
break;
case 1: // One argument to be users_id
$this->_sql = "(SELECT u.users_nic, g.status, p.*"
." FROM users u, plans p LEFT JOIN guests g"
." ON g.plans_id=p.plans_id AND g.users_id=p.users_id"
." WHERE u.users_id=p.users_id AND p.users_id=".$users_id.")"
. " UNION"
. " (SELECT u.users_nic, g.status, p.*"
." FROM plans p, users u, guests g"
." WHERE u.users_id=p.users_id AND g.plans_id=p.plans_id"
." AND g.users_id=".$_users_id." AND p.users_id!=".$users_id." )"
." ORDER BY día DESC";
break;
case 2: // Two arguments to be users_id y plans_id
$this->_sql = "SELECT u.users_nic, g.status, p.*"
." FROM users u, plans p"
." LEFT JOIN guests g"
." ON g.plans_id=p.plans_id AND g.users_id=".$users_id
." WHERE u.users_id=p.users_id AND p.plans_id=".$plans_id;
break;
}
}
function __destruct(){
// TO DO
mysqli_close($this->_con);
}
public function dir() {
$res = mysqli_query($this->_con, $this->_sql)
or die("Fallo de Consulta");
$arrSalida = array();
while ($fila = mysqli_fetch_array($res)) {
$arrSalida[] = $fila;
}
return $arrSalida;
}
}
?>
这个class有什么问题?完成切换以使用一个或两个参数实现 __construct 。并且 model 和 classes 文件夹存在并且文件名正确。
希望有人能提供帮助。谢谢。
难以置信,问题出在我的 php 代码中的 隐藏字符 中。我删除了该文件并创建了一个新文件,再次输入代码而没有 copy/paste,问题就消失了。可悲的是,我没有保留该文件以使用另一个文本编辑器对其进行分析,因为我可以看到坏字符。
我有一个奇怪的问题。其 Plans.php 文件中有一些计划 class 包含在主 php 中,但似乎未被系统加载。
看,这是action.php文件
<?php
// action.php gets 3 parameters:
// - CONTROLLER: one on AUTH, SYSTEM, USER, ADS
// - ACTIVITY: one on LOGIN, PLANS, CONTACTS, GUESTS, CONFIG, MESSAGES
// - ACTION: LIST, VIEW, EDIT, INSERT, UPDATE
include './config/config.php';
include './utils/Connect_db.php';
require_once './model/Plans.php';
require_once './controllers/MainController.php';
require_once './controllers/AuthController.php';
require_once './controllers/UserController.php';
require_once './classes/ValidateUser.php';
if (class_exists('Plans')) {
error_log('action: Plans exists');
} else {
error_log('action: Plans NOT exists');
}
if (class_exists('AuthController')) {
error_log('action: AuthController exists');
} else {
error_log('action: AuthController NOT exists');
}
$main = new MainController();
?>
我放了一些 class_exists 函数来检查 Plans class 是否加载。
这是 error_log 文件输出:
[13-Feb-2015 01:04:39 Europe/Brussels] action: Plans NOT exists
[13-Feb-2015 01:04:39 Europe/Brussels] action: AuthController exists
显然以后使用计划 class 会导致 计划 class 未找到
这是我的 Plans.php 文件:
<?php
class Plans {
private $_con;
private $_sql;
function __construct($users_id, $plans_id) {
$this->_con = Connect_db();
switch(func_num_args()) {
case 0:
break;
case 1: // One argument to be users_id
$this->_sql = "(SELECT u.users_nic, g.status, p.*"
." FROM users u, plans p LEFT JOIN guests g"
." ON g.plans_id=p.plans_id AND g.users_id=p.users_id"
." WHERE u.users_id=p.users_id AND p.users_id=".$users_id.")"
. " UNION"
. " (SELECT u.users_nic, g.status, p.*"
." FROM plans p, users u, guests g"
." WHERE u.users_id=p.users_id AND g.plans_id=p.plans_id"
." AND g.users_id=".$_users_id." AND p.users_id!=".$users_id." )"
." ORDER BY día DESC";
break;
case 2: // Two arguments to be users_id y plans_id
$this->_sql = "SELECT u.users_nic, g.status, p.*"
." FROM users u, plans p"
." LEFT JOIN guests g"
." ON g.plans_id=p.plans_id AND g.users_id=".$users_id
." WHERE u.users_id=p.users_id AND p.plans_id=".$plans_id;
break;
}
}
function __destruct(){
// TO DO
mysqli_close($this->_con);
}
public function dir() {
$res = mysqli_query($this->_con, $this->_sql)
or die("Fallo de Consulta");
$arrSalida = array();
while ($fila = mysqli_fetch_array($res)) {
$arrSalida[] = $fila;
}
return $arrSalida;
}
}
?>
这个class有什么问题?完成切换以使用一个或两个参数实现 __construct 。并且 model 和 classes 文件夹存在并且文件名正确。
希望有人能提供帮助。谢谢。
难以置信,问题出在我的 php 代码中的 隐藏字符 中。我删除了该文件并创建了一个新文件,再次输入代码而没有 copy/paste,问题就消失了。可悲的是,我没有保留该文件以使用另一个文本编辑器对其进行分析,因为我可以看到坏字符。