Ответ 1
Прежде всего проверьте, является ли $ENGINE."/classUser.php"
допустимым именем существующего файла.
Попробуйте следующее:
var_dump(file_exists($ENGINE."/classUser.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
)
);
}
}
?>
Прежде всего проверьте, является ли $ENGINE."/classUser.php"
допустимым именем существующего файла.
Попробуйте следующее:
var_dump(file_exists($ENGINE."/classUser.php"));
Убедитесь, что ваша среда не придирается к вашим открывающим тегам. Для моей конфигурации требуется:
<?php
Если я пытаюсь использовать:
<?
Затем я получаю ту же ошибку, что и вы.
if ( ! class_exists('User'))
die('There is no hope!');
У меня была эта проблема, и решение было пространством имен. Включенный файл был включен в собственное пространство имен. Очевидная вещь, которую легко упускать из виду.
Проблема исчезла, когда я сделал
sudo service apache2 restart
Это случилось со мной! Проблема заключается в том, что каким-то образом вы включаете файл с тем же именем файла класса, что делает недействительным тот же класс!
Проверьте путь включения и проверки файлов с тем же именем!
Проверьте file permissions
для правильного пользователя linux для classUser.php
На самом деле, это очень старый поток, но полезный...
Когда декларация пространства имен является частью вашего файла 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 } ?>
Также может быть, что вы по ошибке прокомментировали такую строку, как require_once __DIR__.'/../vendor/autoload.php';
--- ваши пространства имен не загружены.
Или вы забудете добавить в композитор карту классов, поэтому классы не загружаются автоматически и недоступны. Например,
"autoload": {
"psr-4": {
"": "src/"
},
"classmap": [
"dir/YourClass.php",
]
},
"require": {
"php": ">=5.3.9",
"symfony/symfony": "2.8.*",
В качестве более систематического и структурированного решения вы можете определить папки, в которых хранятся ваши классы, и создать автозагрузчик (__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
}
}
После почти двух часов отладки я пришел к выводу, что лучшим решением для этого является присвоение имени файла другому классу, который он содержит. Например:
До example.php содержит:
<?php
class example {
}
Решение: переименуйте файл в example.class.php(или что-то в этом роде) или переименуйте класс в example_class (или что-то в этом роде)
Надеюсь, что это поможет.
Дважды проверьте свои требования к автозагрузчику и пространства имен.
/Path/ClassName
) или с инструкцией use
в верхней части файла.File Permissions
File size
.Иногда проблема в недоступном или поврежденном файле, как в моем случае
Может быть, это то, как вы используете новый пользователь(). Установить путь что-то вроде
$user = new \resources\engine\ajax\User();
Просто скопируйте определение класса, которое вы хотите использовать, и вставьте его в файл PHP. Удалить "включить __once" или "require __once". Он не покажет эту ошибку. Это сработало для меня.