作曲家要求后找不到类

时间:2019-09-27 06:37:32

标签: php composer-php

我正在按照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',
);

3 个答案:

答案 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/"
     }
相关问题