我正在按照article
学习php和作曲家我尝试使用外部依赖性composer require phpunit/php-timer
。
这是我的composer.json:
{
"name": "ypapax/composer_php_hello_world_log4php",
"minimum-stability": "dev",
"require": {
"php": ">= 7.2",
"phpunit/php-timer": "^2.1@dev"
},
"autoload": {
"psr-0": {
"HelloWorld": "src/"
},
"classname": {
"PHP_Timer": "src/"
}
}
}
和我的test.php
:
<?php
// Autoload files using Composer autoloader.
require_once __DIR__ . '/../vendor/autoload.php';
use HelloWorld\Greetings;
echo Greetings::sayHelloWorld();
greetings.php在哪里
<?php
namespace HelloWorld;
use PHP_Timer;
class Greetings
{
public static function sayHelloWorld()
{
$timer = new PHP_Timer();
$timer . start();
return 'Hello World\n' . $timer->resourceUsage() . "\n";
}
}
我运行测试php tests/test.php
它给了我一个错误:
PHP Fatal error: Uncaught Error: Class 'PHP_Timer' not found in composer_php_hello_world_log4php/src/HelloWorld/Greetings.php:11
Stack trace:
#0 composer_php_hello_world_log4php/tests/test.php(8): HelloWorld\Greetings::sayHelloWorld()
#1 {main}
thrown in composer_php_hello_world_log4php/src/HelloWorld/Greetings.php on line 11
Fatal error: Uncaught Error: Class 'PHP_Timer' not found in composer_php_hello_world_log4php/src/HelloWorld/Greetings.php:11
Stack trace:
#0 composer_php_hello_world_log4php/tests/test.php(8): HelloWorld\Greetings::sayHelloWorld()
#1 {main}
thrown in composer_php_hello_world_log4php/src/HelloWorld/Greetings.php on line 11
我猜composer.json中有问题:
"classname": {
"PHP_Timer": "src/"
}
PHP版本:
$ php --version
PHP 7.3.9 (cli) (built: Sep 14 2019 18:07:55) ( NTS )
链接到我的test repo
这是我的文件autoload_namespaces.php
:
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'HelloWorld' => array($baseDir . '/src'),
);
和autoload_classmap.php:
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'SebastianBergmann\\Timer\\Exception' => $vendorDir . '/phpunit/php-timer/src/Exception.php',
'SebastianBergmann\\Timer\\RuntimeException' => $vendorDir . '/phpunit/php-timer/src/RuntimeException.php',
'SebastianBergmann\\Timer\\Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php',
);
答案 0 :(得分:1)
您没有加载正确的namespace
。我建议您在包裹页面上检出examples
答案 1 :(得分:1)
我认为您在composer.json
中不需要这个:
"classname": {
"PHP_Timer": "src/"
}
根据https://github.com/sebastianbergmann/php-timer/blob/master/src/Timer.php,您需要
use SebastianBergmann\Timer\Timer as PHP_Timer;
在您的greetings.php
文件中。
答案 2 :(得分:1)
use
类中缺少Greetings
语句:
<?php
namespace HelloWorld;
use SebastianBergmann\Timer\Timer;
class Greetings
{
public static function sayHelloWorld()
{
$timer = new Timer();
$timer::start();
return 'Hello World\n' . $timer->resourceUsage() . "\n";
}
}
这可以从composer.json
中删除:
"classname": {
"PHP_Timer": "src/"
}