我正在学习php名称空间和自动加载功能,希望使用该名称空间时自动加载会生效,如何使它起作用?
我的php环境是php 7.3.1,我使用的开发工具是phpstorm
我尝试不使用名称空间来自动加载类,这很好,但是如果使用名称空间,则会出现导入错误。
这三个文件都在同一目录中。
目录结构:
project
| automatically-load-objects.php
│ autoLoadA.php
│ autoLoadB.php
automatically-load-objects.php:
<?php
spl_autoload_register(function ($class) {
require_once $class . '.php';
});
$obj1 = new \autoLoadTest\autoLoadA();
$obj2 = new \autoLoadTest\autoLoadB();
$obj1->classA();
$obj2->classB();
autoLoadA.php:
<?php
namespace autoLoadTest;
class autoLoadA
{
public static function classA()
{
echo 'Hello, this is classA!' . PHP_EOL;
}
}
autoLoadB.php:
<?php
namespace autoLoadTest;
class autoLoadB
{
public static function classB()
{
echo 'Hello, this is classB!' . PHP_EOL;
}
}
我希望自动加载生效,但实际上phpstorm给出了一些错误:
警告:require_once(autoLoadTest \ autoLoadA.php):打开失败 流:中没有这样的文件或目录 C:\ Users \ Riven \ Documents \ Study \ php \ php-pracitice \ php-programming \ classes入门 第4行上的对象和对象\第一部分\ automatically-load-objects.php
严重错误:require_once():需要打开失败 'autoLoadTest \ autoLoadA.php'(include_path ='.; C:\ php \ pear')在 C:\ Users \ Riven \ Documents \ Study \ php \ php-pracitice \ php-programming \ classes入门 第4行上的对象和对象\第一部分\ automatically-load-objects.php