我正在尝试使用PHP的特征功能和命名空间来组织我的项目代码和文件。
但我不知道为什么会得到这个
致命错误:第11行的E:\ www \ modernphp \ test.php中找不到“ModernPHP \ News”类。
我的文件在同一目录中。我只有一个目录modernphp;这三个文件超出了这个目录。
我是否滥用名称空间?还是别的什么?
<?php
namespace ModernPHP;
trait db_connect
{
protected $host;
protected $user;
protected $pwd;
protected $db;
protected $connect;
public function __construct($host, $user, $pwd, $db)
{
$this->host = $host;
$this->user = $user;
$this->pwd = $pwd;
$this->db = $db;
}
public function connect()
{
$this->connect = mysqli_connect($this->host, $this->user, $this->pwd);
mysqli_select_db($this->connect, $this->db);
}
public function query($table, $arr_fields = array(), $order_by = false)
{
$sql = 'SElECT * FROM {$table}';
return mysqli_query($this->connect, $sql);
}
}
<?php
namespace ModernPHP\News;
class News
{
use mysql;
/*
public function __construct()
{
//$db = new m
}
*/
public function latestNews()
{
}
}
<?php
namespace ModernPHP;
use ModernPHP\News;
class test {
public function __construct()
{
$news_object = new News('localhost', 'root', '', 'invo');
print_r($news_object);
}
}
$test = new Test;
---于2016年1月6日加入---
class ComposerAutoloaderInita3585bdd4dd862cdaf5a9a8f6faaa488
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInita3585bdd4dd862cdaf5a9a8f6faaa488', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
答案 0 :(得分:3)
您在News
中定义了您的班级namespace ModernPHP\News
(请参阅News.php的第一行)。这意味着具有命名空间的类是ModernPHP\News\News
,而不是ModernPHP\News
。
您要么在News
中定义namespace ModernPHP
(用namespace
替换News.php中的namespace ModernPHP;
行,或者您需要use ModernPHP\News\News;
ModernPHP
的定义。
此外,您需要自动加载器或显式include
/ require
语句来加载类和特征文件。如果您尚未加载News.php文件或告诉PHP如何执行此操作,则不能简单地执行new News(...)
。
答案 1 :(得分:0)
确保您还拥有命名空间的子文件夹 例如
namespace ModernPHP\News;
你需要一个带有子文件夹News的文件夹ModernPHP,在这个子文件夹中是你的班级新闻。然后,您可以将该类用于:
use ModernPHP\News\News;