【问题标题】:Composer not working correctly for first time userComposer 对第一次使用的用户无法正常工作
【发布时间】:2021-10-28 17:35:08
【问题描述】:

我是第一次尝试 Composer,我正在学习 https://devanswers.co/install-composer-php-windows-10/ 的教程。

安装后,我尝试了教程中的步骤,但出现错误: ( ! ) 致命错误:未捕获的错误:在第 12 行的 C:\inetpub\wwwroot\devforms.gsnetx.org\composerTest\test.php 中找不到类 'Timer' ( ! ) 错误:在第 12 行的 C:\inetpub\wwwroot\devforms.gsnetx.org\composerTest\test.php 中找不到类 'Timer'

测试的第 12 行正在启动 Timer 类:

require __DIR__ . '/vendor/autoload.php';
Timer::start();
// your code
$time = Timer::stop();
var_dump($time);
print Timer::secondsToTimeString($time);

autoload.php的内容是:

// autoload.php @由 Composer 生成 需要一次 DIR 。 '/composer/autoload_real.php';

return ComposerAutoloaderInitb589c5929143c1624bdcdde8c7e6fd8b::getLoader();v

目录结构为:

composerTest
composerTest\vendor
composerTest\vendor\composer
composerTest\vendor\phpunit
composerTest\vendor\phpunit\php-timer
composerTest\vendor\phpunit\php-timer\src
composerTest\vendor\phpunit\php-timer\tests

而autoload_real.php的内容是:

<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitb589c5929143c1624bdcdde8c7e6fd8b
{
    private static $loader;
    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }
    /**
     * @return \Composer\Autoload\ClassLoader
     */
    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }
        require __DIR__ . '/platform_check.php';
        spl_autoload_register(array('ComposerAutoloaderInitb589c5929143c1624bdcdde8c7e6fd8b', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));

spl_autoload_unregister(array('ComposerAutoloaderInitb589c5929143c1624bdcdde8c7e6fd8b', 'loadClassLoader'));

        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
        if ($useStaticLoader) {
            require __DIR__ . '/autoload_static.php';
           call_user_func(\Composer\Autoload\ComposerStaticInitb589c5929143c1624bdcdde8c7e6fd8b::getInitializer($loader));
        } else {
            $map = require __DIR__ . '/autoload_namespaces.php';
            foreach ($map as $namespace => $path) {
                $loader->set($namespace, $path);
            }

            $map = require __DIR__ . '/autoload_psr4.php';
            foreach ($map as $namespace => $path) {
                $loader->setPsr4($namespace, $path);
            }

            $classMap = require __DIR__ . '/autoload_classmap.php';
            if ($classMap) {
                $loader->addClassMap($classMap);
            }
        }
        $loader->register(true);
        return $loader;
    }
}

据我所见,所有路径看起来都是正确的,但由于这是我第一次使用 Composer,我显然不确定哪里出了问题,希望能指出正确的方向。

我确定这些信息还不够,所以请告诉我还需要什么帮助

提前致谢

【问题讨论】:

  • Class 'Timer' not found - 您尝试过什么来解决问题?你在哪里定义了那个类?

标签: php composer-php


【解决方案1】:

Composer无关,是你引用这个类的方式。

您缺少use 语句,或者您需要在使用该类时完全使用 FQCN - 完全限定类名称。

在您的示例中,您尝试加载不存在的 Timer 类,正确的 FQCN - 完全限定类名称是 SebastianBergmann\Timer\Timer;

因此,您要么每次都使用正确的 FQCN( SebastianBergmann\Timer\Timer-&gt;start())提及该类,要么使用 use 语句以这种方式调用没有其命名空间的简单类名:

use SebastianBergmann\Timer\Timer;
// Timer refers now directly (it's an alias) to SebastianBergmann\Timer\Timer so you can use directly :
Timer::start();

请参阅https://www.php.net/manual/en/language.namespaces.importing.php 了解后一种更好的解决方案,请参阅https://www.php.net/manual/en/language.namespaces.php 了解命名空间如何工作的说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2015-09-10
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多