简体   繁体   English

自定义名称空间的Composer psr-0自动加载不起作用

[英]Composer psr-0 autoloading of custom namespaces does not work

I have trouble adding my own namespaces to composer with PSR-0. 我在将我自己的名称空间添加到PSR-0作曲家时遇到麻烦。 I have read this and this but I still can't make it work 我已经读过这个这个,但是我仍然无法使它工作

composer.json composer.json

{
"require": {
    "klein/klein": "2.0.x",
    "doctrine/orm": "2.4.4"

},
"autoload": {
    "psr-0": {
        "mynamespace":        "src/"
        }
}
}

The src folder is placed inside the same directory as composer.json src文件夹与composer.json放在同一目录中

The src directory has the following structure src目录具有以下结构

src
└── mynamespace
    ├── Keys.php

Keys.php Keys.php

<?php
namespace mynamespace\Keys;

define ("API_KEY", "XXXXXXXXXXXX");
?>

index.php 的index.php

use Klein\Klein;
use mynamespace\Keys;
require_once __DIR__ . '/vendor/autoload.php';

$klein = new Klein(); // works
echo API_KEY;  // Undefined constant

You can only load classes, interfaces and traits with autoloading. 您只能通过自动加载来加载类,接口和特征。

Because all you do is add a use clause which does not do anything by itself with autoloading (ie it does not load something), and you do not use a class, nothing happens. 因为您要做的只是添加一个use子句,该子句本身不会自动加载任何操作(即,它不会加载任何内容),并且您不使用类,因此不会发生任何事情。

I recommend using class constants. 我建议使用类常量。 They may be put into classes or interfaces: 它们可以放在类或接口中:

namespace mynamespace;

interface Keys {
    const API_KEY = 'XXXXXXXX';
}

use mynamespace/Keys;
echo Keys::API_KEY;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM