【问题标题】:php Class not found even in require_once file即使在require_once文件中也找不到php类
【发布时间】:2015-04-13 22:53:21
【问题描述】:

我有一个奇怪的问题。它的 Plans.php 文件中有一些 Plans 类包含在主 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 类是否已加载。

这里是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

显然后来使用 Plans 类会导致 Plans class Not Found

这是我的 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;

    }
}
?>

这门课有什么问题?完成切换以使用一个或两个参数实现 __construct。并且存在 model 和 classes 文件夹,并且文件名称正确。

希望有人可以提供帮助。谢谢。

【问题讨论】:

  • 你的文件目录结构是什么样的?
  • 一个包含模型、配置、实用程序、控制器和类文件夹的 php 文件夹。 action.php 直接挂在 php 文件夹中,而 Plans.php 在模型文件夹中,而 ValidateUser.php 在类中
  • 试试这个:require_once getcwd() . '/models/Plans.php';.
  • 嗨达伦,同样的错误:[13-Feb-2015 11:35:34 Europe/Brussels] plans_list: 计划不存在......我认为它应该与类定义本身有关。 Php 不喜欢某些东西并且类没有加载。不幸的是,日志文件中没有任何痕迹。不知道php中是否可以提高日志级别。
  • 大家好...难以置信,听起来问题出在类定义中的一些隐藏字符。我创建了一个新文件,在没有复制/粘贴的情况下输入所有内容,它可以工作......也许有些扭曲的 1 或损坏的 0 :-)......感谢您的回答。

标签: php class


【解决方案1】:

难以置信,问题出在我的 php 代码中的 隐藏字符 中。我删除了该文件并创建了一个新文件,再次键入代码而无需复制/粘贴,问题就消失了。遗憾的是,我没有保留文件以使用另一个文本编辑器对其进行分析,因为我可以看到错误的字符。

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多