Подтвердить что ты не робот

Класс PHP не найден, но он включен

Я включаю класс PHP с

require_once($ENGINE."/classUser.php");

но когда код выполняется, я получаю эту ошибку:

Неустранимая ошибка: класс "Пользователь" не найден C:\xampp\htdocs\WebName\resources\engine\ajax\signup.php в строке 12

Я все еще не могу понять, в чем проблема. Я на 99% уверен, что это правильно.

"$ ENGINE" верен, и класс тоже верен (Netbeans предлагает мне методы класса и переменные).

signup.php:

<?php

/* Created on: 13/12/2011
 * Author: 
 * 
 * Description: User signup procedure.
 */

require_once("../settings.php");
require_once($ENGINE."/classUser.php");

$user = new User();
$user->createUser($_POST["username"], $_POST["email"], $_POST["password"]);


?>

classUser.php:

<?php

/* Created on: 13/12/2011
 * Author: 
 * 
 * Description: This class manages users.
 */

require_once("settings.php");
require_once($LIBRARY."/cassandraphp/cassandra.php");

class User {

    public function createUser($username, $email, $password){
        $cassandra = Cassandra::createInstance($CASSANDRASERVER);
        $cassandra->set(
                "user.".$username,
                array(
                    'ID' => uniqid(),
                    'Username' => $username,
                    'Email' => $email,
                    'Password' => $password
                )
        );
    } 
}

?>
4b9b3361

Ответ 1

Прежде всего проверьте, является ли $ENGINE."/classUser.php" допустимым именем существующего файла. Попробуйте следующее:

var_dump(file_exists($ENGINE."/classUser.php"));

Ответ 2

Убедитесь, что ваша среда не придирается к вашим открывающим тегам. Для моей конфигурации требуется:

<?php

Если я пытаюсь использовать:

<?

Затем я получаю ту же ошибку, что и вы.

Ответ 3

if ( ! class_exists('User')) 
    die('There is no hope!');

Ответ 4

У меня была эта проблема, и решение было пространством имен. Включенный файл был включен в собственное пространство имен. Очевидная вещь, которую легко упускать из виду.

Ответ 5

Проблема исчезла, когда я сделал

sudo service apache2 restart

Ответ 6

Это случилось со мной! Проблема заключается в том, что каким-то образом вы включаете файл с тем же именем файла класса, что делает недействительным тот же класс!

Проверьте путь включения и проверки файлов с тем же именем!

Ответ 7

Проверьте file permissions для правильного пользователя linux для classUser.php

Ответ 8

На самом деле, это очень старый поток, но полезный...

Когда декларация пространства имен является частью вашего файла php-класса, "такие странные ошибки имеют тенденцию появляться".

Решение. Используйте namespace с {, ваш код выглядит следующим образом:

<?php

namespace path_to\lib {

require_once "folder/php_class_file_where_namespace_declaration_is_part_of_it.php";

**YOUR CODE HERE**

<?php } ?>

Ответ 9

Также может быть, что вы по ошибке прокомментировали такую ​​строку, как require_once __DIR__.'/../vendor/autoload.php'; --- ваши пространства имен не загружены.

Или вы забудете добавить в композитор карту классов, поэтому классы не загружаются автоматически и недоступны. Например,

"autoload": {
    "psr-4": {
        "": "src/"
    },
    "classmap": [
        "dir/YourClass.php",
    ]
},
"require": {
    "php": ">=5.3.9",
    "symfony/symfony": "2.8.*",

Ответ 10

В качестве более систематического и структурированного решения вы можете определить папки, в которых хранятся ваши классы, и создать автозагрузчик (__autoload()), который будет искать файлы классов в определенных местах:

require_once("../settings.php");
define('DIR_CLASSES', '/path/to/the/classes/folder/'); // this can be inside your settings.php

$user = new User();
$user->createUser($_POST["username"], $_POST["email"], $_POST["password"]);

function __autoload($classname) { 
    if(file_exists(DIR_CLASSES . 'class' . $classname . '.php')) {
        include_once(DIR_CLASSES . 'class' . $classname . '.php'); // looking for the class in the project classes folder
    } else {
        include_once($classname . '.php'); // looking for the class in include_path
    }
} 

Ответ 11

После почти двух часов отладки я пришел к выводу, что лучшим решением для этого является присвоение имени файла другому классу, который он содержит. Например:

До example.php содержит:

<?php
 class example {

 }

Решение: переименуйте файл в example.class.php(или что-то в этом роде) или переименуйте класс в example_class (или что-то в этом роде)

Надеюсь, что это поможет.

Ответ 12

Дважды проверьте свои требования к автозагрузчику и пространства имен.

  • Например, ваш автозагрузчик требует, чтобы ваше пространство имен соответствовало структура папки, где находится файл? Если да, убедитесь, что они матч.
  • Еще один пример: ваш автозагрузчик требует, чтобы ваши имена файлов были следовать определенной схеме/чувствительность к регистру? Если да, убедитесь, что filename следует за правильным шаблоном.
  • И, конечно, если класс находится в пространстве имен, обязательно включите его правильно с полным именем класса (/Path/ClassName) или с инструкцией use в верхней части файла.

Ответ 13

  1. Проверьте File Permissions
  2. Проверьте File size.

Иногда проблема в недоступном или поврежденном файле, как в моем случае

Ответ 14

Может быть, это то, как вы используете новый пользователь(). Установить путь что-то вроде

$user = new \resources\engine\ajax\User();

Ответ 15

Просто скопируйте определение класса, которое вы хотите использовать, и вставьте его в файл PHP. Удалить "включить __once" или "require __once". Он не покажет эту ошибку. Это сработало для меня.