Oma*_*riq 3 php namespaces autoloader composer-php psr-4
我正在使用Windows 10.在src根目录中创建文件夹后,我在其中创建了两个文件.
目录结构(运行前composer install):
?
??? composer.json
??? run.php
?
??? src
??? childclass.php
??? parentclass.php
Run Code Online (Sandbox Code Playgroud)
根目录中的两个文件:
composer.json:
{
"name": "myvendor/mypackage",
"description": "nothing",
"authors": [
{
"name": "Omar Tariq",
"email": "XXXXX@gmail.com"
}
],
"require": {},
"autoload": {
"psr-4": {
"myns\\": "src/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
run.php:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use myns\childclass as childclass;
$childclass = new childclass();
$childclass->abc();
Run Code Online (Sandbox Code Playgroud)
src文件夹中的两个文件:
childclass.php:
<?php
require_once 'parentclass.php';
use myns\parentclass as parentclass;
class childclass extends parentclass
{
public function abc()
{
echo 'hello world';
}
}
Run Code Online (Sandbox Code Playgroud)
parentclass.php:
<?php
namespace myns;
abstract class parentclass
{
abstract public function abc();
}
Run Code Online (Sandbox Code Playgroud)
运行后的目录结构composer install:
?
??? composer.json
??? run.php
?
??? src
? ??? childclass.php
? ??? parentclass.php
?
??? vendor
??? autoload.php
?
??? composer
??? autoload_classmap.php
??? autoload_namespaces.php
??? autoload_psr4.php
??? autoload_real.php
??? ClassLoader.php
??? installed.json
??? LICENSE
Run Code Online (Sandbox Code Playgroud)
现在,当我跑:
php run.php
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
致命错误:在第7行的C:\ wamp ...\run.php中找不到类'myns\childclass'
在composer.json你定义的src文件夹中你使用myns命名空间,所以在childclass.php你应该使用
namespace myns;
Run Code Online (Sandbox Code Playgroud)
它也没有必要添加:
require_once 'parentclass.php';
Run Code Online (Sandbox Code Playgroud)
要么
use myns\parentclass as parentclass;
Run Code Online (Sandbox Code Playgroud)
所以你的childclass.php看起来像这样:
<?php
namespace myns;
class childclass extends parentclass
{
public function abc()
{
echo 'hello world';
}
}
Run Code Online (Sandbox Code Playgroud)
另外在run.php文件中你可以替换:
use myns\childclass as childclass;
Run Code Online (Sandbox Code Playgroud)
成
use myns\childclass;
Run Code Online (Sandbox Code Playgroud)
as如果您不想在课程中使用其他名称,则无需使用.
您还应该考虑使用带有大写字母(Studly caps)的名称空间和类相同的名称空间.而不是myns使用MyNs,而不是parentclass使用ParentClass.您应该查看PSR-1编码标准和PSR-2编码标准,以遵循最佳编码实践.
| 归档时间: |
|
| 查看次数: |
7500 次 |
| 最近记录: |