【问题标题】:Autoloading with PSR4 naming in php在 php 中使用 PSR4 命名自动加载
【发布时间】:2015-04-08 04:38:08
【问题描述】:

我有以下库结构

C:\WWW\WEBS
|   users.php
|
\---lib
    |   Api.php
    |   Server.php
    |   TimeSync.php
    |
    \---TimeSync
            Ntp.php
            Protocol.php
            Sntp.php

在 server.php 我有

<?php
namespace lib; 
class Server extends Api
{
}
?>

在 users.php 中我将其用作

<?php
  use lib\Server;
  $objServer = new Server();
?>

我也尝试过使用 use lib\Server;

但在这两种情况下,它都在说

致命错误:在

中找不到类“lib\Server”

C:\www\Experimentation\webserviceserver\users.php 第 7 行

我哪里出错了。我应该使用自动加载器吗?

【问题讨论】:

  • 您是否需要或在某处包含该文件?如果不是,那么可以,您可以使用自动加载来确保将其加载到内存中。如果这实际上是您的全部代码,那么问题在于这两个文件完全不知道彼此。
  • 你用的是什么自动加载器?
  • @Mark 我想我当时误解了这个概念.. 有人说使用 php 5.3 和 psr4 不需要自动加载器。如何为 psr4 编写标准自动加载器?

标签: php autoload psr-4


【解决方案1】:

您需要使用自动加载器。 您可以使用 Composer 中提供的那个。 一旦你安装了它(在你的项目的根目录),你放置一个 composer.json 文件,并在里面复制以下代码:

 {
    "autoload":{
        "psr-4":{
            "Lib\\" : "lib/"
        }
    }
 }

然后你使用命令composer dumpautoload。这会将自动加载文件复制到项目根目录下名为“vendor”的文件夹中。

然后在 users.php 中你需要自动加载器:

require_once "vendor/autoload.php"

你使用命名空间:

use Lib;
$objServer = new Lib\Server();

它可能会起作用。

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 2016-03-24
    • 2023-03-10
    • 2010-11-24
    • 1970-01-01
    • 2017-12-26
    • 2018-01-24
    • 2013-11-25
    相关资源
    最近更新 更多