【发布时间】:2020-10-07 11:27:31
【问题描述】:
我是 PHP 新手,我只是想创建一个包 ("simple-php"),然后是一个使用该包的示例项目 ("example-php")。
simple-php(包)
simple-php 有一个作曲家文件:
{
"name": "simple/simple-php",
"description": "",
"version": "0.0.1",
"autoload": {
"psr-4": { "Simple\\" : "src/" }
}
}
simple-php 内部是:
src/
HelloWorld.php
composer.json
而HelloWorld.php 是:
namespace Simple;
class HelloWorld
{
public function __construct(
)
}
example-php(包的客户端)
文件结构为:
index.php
composer.json
composer.json 包括:
{
"repositories": [
{
"type": "path",
"url": "../simple-php"
}
],
"require": {
"simple/simple-php": "0.0.1"
}
}
我在上面运行了php composer.phar install 并得到了composer.lock:
...
{
"name": "simple/simple-php",
"version": "0.0.1",
"dist": {
"type": "path",
"url": "../simple-php",
"reference": "18171b07ac196fb22d8d95578be916e7897d003e"
},
"type": "library",
"autoload": {
"psr-4": {
"Simple\\": "src/"
}
},
"transport-options": {
"relative": true
}
},
...
所以现在在index.php 我愿意:
...
require_once('vendor/autoload.php');
new Simple\HelloWorld();
vendor/autoload.php 存在,顺便说一句,它包含:
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit661a24b81ca7aae7b7471c810ee626fa::getLoader();
但是当我运行页面时,我得到:
致命错误:未捕获的错误:在 /var/www/html/index.php:21 中找不到类“Simple\HelloWorld”
我想我没有正确设置某种命名空间,但我看不到它。如何加载HelloWorld 类?
我正在使用 Docker php:7.2-apache 映像。
【问题讨论】:
-
您能显示
vendor/autoload.php文件中的内容吗? -
你是否在任何 repo 或 git 中上传了这个作曲家?如果可能的话,你能分享一下吗?
-
我已经检查过了,它工作正常,但你在
HelloWorld.php文件中犯了一个错误,错过了构造函数括号,将其更改为public function __construct() {} -
看看这个,我已经为你创建了github.com/turivishal/simple-php-composer
-
好的,你也可以检查文件夹和文件的权限..
标签: php docker composer-php