我包含了一个带有
的PHP类require_once($ENGINE."/classUser.php");
但是当代码执行时,我收到此错误:
致命错误:未找到“用户”类 第12行的C:\ xampp \ htdocs \ WebName \ resources \ engine \ ajax \ signup.php
我仍然无法弄清楚问题是什么。我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
)
);
}
}
?>
答案 0 :(得分:40)
检查以确保您的环境对开场标记不挑剔。我的配置需要:
<?php
如果我尝试使用:
<?
然后我得到了和你一样的错误。
答案 1 :(得分:31)
if ( ! class_exists('User'))
die('There is no hope!');
答案 2 :(得分:11)
我遇到了这个问题,解决方案是命名空间。包含的文件包含在自己的命名空间中。明显的事情,容易被忽视。
答案 3 :(得分:7)
首先检查$ENGINE."/classUser.php"
是否是现有文件的有效名称。
试试这个:
var_dump(file_exists($ENGINE."/classUser.php"));
答案 4 :(得分:3)
我做的时候问题就消失了
sudo service apache2 restart
答案 5 :(得分:2)
也可能是,你错误地注释掉了像require_once __DIR__.'/../vendor/autoload.php';
这样的行---你的命名空间没有加载。
或者您忘记将类映射添加到作曲家,因此类不会自动加载并且不可用。例如,
"autoload": {
"psr-4": {
"": "src/"
},
"classmap": [
"dir/YourClass.php",
]
},
"require": {
"php": ">=5.3.9",
"symfony/symfony": "2.8.*",
答案 6 :(得分:1)
事实上,它是一个非常古老的线程但很有用......
当名称空间声明是你的php类文件的一部分&#34;这种奇怪的错误往往会出现&#34; 。
解决方案:将vector<int> two_sum(vector<int> &numbers, int target) {
vector<int> result;
vector<int> numbers_dup = vector<int>(numbers);
sort(numbers_dup.begin(), numbers_dup.end());
int left = 0, right = numbers_dup.size() - 1;
while(left <= right) {
int sum = numbers_dup[left] + numbers_dup[right];
if(sum == target) {
//find the idex of numbers_dup[left] and numbers_dup[right]
for(int i = 0; i < numbers.size(); i++) {
if(numbers[i] == numbers_dup[left] || numbers[i] == numbers_dup[right]) {
result.push_back(i);
}
if(result.size() == 2) {
return result;
}
}
}
else if(sum > target) {
right--;
}
else {
left++;
}
}
}
与namespace
一起使用,您的代码如下所示:
{
答案 7 :(得分:1)
检查file permissions
以获取classUser.php
答案 8 :(得分:1)
发生在我身上! 问题是,不知何故,您包含一个具有相同文件名的文件,从而使相同的类无效!
检查包含路径和这些具有相同名称的检查文件!
答案 9 :(得分:0)
经过近两个小时的调试后,我得出结论,对此最好的解决方案是为文件名提供与其包含的类不同的名称。例如:
<强>之前强> example.php包含:
<?php
class example {
}
解决方案:将文件重命名为example.class.php(或类似名称),或将类重命名为example_class(或类似名称)
希望这有帮助。
答案 10 :(得分:0)
仔细检查自动加载器的要求&amp;命名空间。
/Path/ClassName
)或文件顶部的use
语句。答案 11 :(得分:0)
作为一个更系统化和结构化的解决方案,您可以定义存储类的文件夹,并创建一个自动加载器(__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's classes folder
} else {
include_once($classname . '.php'); // looking for the class in include_path
}
}
答案 12 :(得分:0)
File Permissions
File size
。有时候,就像我的情况一样,文件无法访问或损坏会成为问题
答案 13 :(得分:0)
也许这就是您使用新User()的方式。 设置路径类似
$user = new \resources\engine\ajax\User();
答案 14 :(得分:0)
我的失败对某人可能有用,所以我以为我会发帖,因为我终于弄清了问题所在。我正在像这样自动加载类:
define("PROJECT_PATH", __DIR__);
// Autoload class definitions
function my_autoload($class) {
if(preg_match('/\A\w+\Z/', $class)) {
include(PROJECT_PATH . '/classes/' . $class . '.class.php');
}
}
spl_autoload_register('my_autoload');
在我的/ classes文件夹中,我有4个课程:
dbobject.class.php
meeting.class.php
session.class.php
user.class.php
后来我创建了一个新类:
cscmeeting.class.php
我开始得到can't load DbObject class
。我根本不知道出了什么问题。一旦我从目录中删除了cscmeeting.class.php
,它又可以正常工作。
我终于意识到,它是按字母顺序遍历目录的,并且在cscmeeting.class.php
之前,第一个加载的类是cscmeeting.class.php
,因为它以D
开头。但是,当我添加以C
开头的新类时,它将首先加载该类并扩展了DbObject
类。所以它每次都塞住。
我最终将DbObject
类命名为_dbobject.class.php
,并且它总是首先加载该类。
我意识到我的命名约定可能不太好,这就是我遇到问题的原因。但是我不熟悉OOP,所以请尽我所能。
答案 15 :(得分:0)
如果您正确包含了文件并且文件存在并且仍然出现错误:
然后确保:
您包含的文件包含该类,并且未在任何命名空间中定义。
如果该类在名称空间中,则:
而不是new YourClass()
,您必须做new YourNamespace\YourClass()
答案 16 :(得分:0)
是的,在使用特征或扩展类的情况下会发生这种情况,您应该注意在类声明之后实例化类,例如:
这个例子会触发 class not found 错误:
$class = new A();
class A {
use SomeTrait;
}
为了让它工作,像这样移动底部的初始化步骤:
class A {
use SomeTrait;
}
$class = new A();
答案 17 :(得分:-1)
您应该在ClassUser.php中声明名称空间,如下所示:
<?php
namespace app; // where 'app' is a folder declared as a root for the project
class ClassUser{
public function test(){
//log something here
}
}
?>
然后您可以将类添加到其他php文件中,如下所示:
<?php
use app\ClassUser;
$classUserLcl = new ClassUser();
$classUserLcl->test();
?>
您已完成。 否则会滥用:
你哦!它是致命错误:未捕获的错误:在...中找不到类'app \ ClassUser'
答案 18 :(得分:-7)
只需复制您要使用的类定义并将其粘贴到PHP文件中即可。删除&#34;包含__once&#34;或者&#34;要求__once&#34;。它不会显示该错误。它对我有用。