Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动加载程序导致找不到类_Php_Wordpress_Composer Php_Autoload - Fatal编程技术网

Php 自动加载程序导致找不到类

Php 自动加载程序导致找不到类,php,wordpress,composer-php,autoload,Php,Wordpress,Composer Php,Autoload,我正试图在我的wordpress项目中包括一个自动加载器。更具体地说,我正在开发一个插件,其中包含我所有类的类/目录。我希望这些类可以通过名称空间访问我的wordpress项目根目录和子文件/文件夹 我觉得我的composer.json应该负责autoloader实现,尽管我仍然得到一个类notfound致命错误。还有其他人遇到过这个问题吗?我感谢您提前提出的任何建议 这就是我迄今为止所尝试的: /composer.json { "autoload": {

我正试图在我的wordpress项目中包括一个自动加载器。更具体地说,我正在开发一个插件,其中包含我所有类的类/目录。我希望这些类可以通过名称空间访问我的wordpress项目根目录和子文件/文件夹

我觉得我的composer.json应该负责autoloader实现,尽管我仍然得到一个类notfound致命错误。还有其他人遇到过这个问题吗?我感谢您提前提出的任何建议

这就是我迄今为止所尝试的:

/composer.json

  {
        "autoload": {
            "psr-4": {
                "Classes\\": "wp-content/plugins/example-plugin/Classes"
            }
        },
        "require": {}
    }
然后

composer安装

./index.php(在wordpress根目录中)

./wp content/plugins/example plugin/Classes/MyService.php

namespace Classes;

class MyService {

是的,的确,composer应该负责您的依赖项和自动加载。您的配置也是正确的。让我们浏览一个检查列表:

您的环境是这样的吗

$ tree
.
├── composer.json
├── composer.phar
├── index.php
├── vendor
│   ├── autoload.php
│   └── composer
│       ├── autoload_classmap.php
│       ├── autoload_namespaces.php
│       ├── autoload_psr4.php
│       ├── autoload_real.php
│       ├── autoload_static.php
│       ├── ClassLoader.php
│       ├── installed.json
│       └── LICENSE
└── wp-content
    └── plugins
        └── example-plugin
            └── Classes
                └── MyService.php
$ cat composer.json
{
    "name": "my/project",
    "authors": [
        {
            "name": "My Name",
            "email": "my@na.me"
        }
    ],
    "autoload": {
       "psr-4": {
           "Classes\\": "wp-content/plugins/example-plugin/Classes"
       }
    },
    "require": {}
}
$ cat wp-content/plugins/example-plugin/Classes/MyService.php
<?php
namespace Classes;

class MyService {
}
$ cat index.php
<?php

require_once('./vendor/autoload.php');

$foo = new \Classes\MyService;

var_dump($foo);
您的composer.json是这样的吗

$ tree
.
├── composer.json
├── composer.phar
├── index.php
├── vendor
│   ├── autoload.php
│   └── composer
│       ├── autoload_classmap.php
│       ├── autoload_namespaces.php
│       ├── autoload_psr4.php
│       ├── autoload_real.php
│       ├── autoload_static.php
│       ├── ClassLoader.php
│       ├── installed.json
│       └── LICENSE
└── wp-content
    └── plugins
        └── example-plugin
            └── Classes
                └── MyService.php
$ cat composer.json
{
    "name": "my/project",
    "authors": [
        {
            "name": "My Name",
            "email": "my@na.me"
        }
    ],
    "autoload": {
       "psr-4": {
           "Classes\\": "wp-content/plugins/example-plugin/Classes"
       }
    },
    "require": {}
}
$ cat wp-content/plugins/example-plugin/Classes/MyService.php
<?php
namespace Classes;

class MyService {
}
$ cat index.php
<?php

require_once('./vendor/autoload.php');

$foo = new \Classes\MyService;

var_dump($foo);
您的实现是这样的吗

$ tree
.
├── composer.json
├── composer.phar
├── index.php
├── vendor
│   ├── autoload.php
│   └── composer
│       ├── autoload_classmap.php
│       ├── autoload_namespaces.php
│       ├── autoload_psr4.php
│       ├── autoload_real.php
│       ├── autoload_static.php
│       ├── ClassLoader.php
│       ├── installed.json
│       └── LICENSE
└── wp-content
    └── plugins
        └── example-plugin
            └── Classes
                └── MyService.php
$ cat composer.json
{
    "name": "my/project",
    "authors": [
        {
            "name": "My Name",
            "email": "my@na.me"
        }
    ],
    "autoload": {
       "psr-4": {
           "Classes\\": "wp-content/plugins/example-plugin/Classes"
       }
    },
    "require": {}
}
$ cat wp-content/plugins/example-plugin/Classes/MyService.php
<?php
namespace Classes;

class MyService {
}
$ cat index.php
<?php

require_once('./vendor/autoload.php');

$foo = new \Classes\MyService;

var_dump($foo);
如果答案为“是”,则创建一个新目录,下载
composer.phar
,运行
php composer.phar init
,将此答案的文件复制并粘贴到该目录中,然后重试


如果这是可行的,那么将
diff
与您的实现结合起来。我的猜测是,如果你走到这一步,你的一个文件中隐藏着一个离群的字符——可能是Unicode空格。

PSR-4不要求文件是
/wp-content/plugins/example-plugin/Classes/Api/MyService.php
(特别注意
Api
目录)?嗨,菲尔,我感谢你的建议,我做了这两个更改,现在仍然很幸运:/(请参见编辑)自从添加
自动加载
字段以来,您是否执行了
转储自动加载
编写器任务?如果添加
require\u一次,会发生什么情况/wp content/plugins/example plugin/Classes/MyService.php'到脚本顶部?感谢您的帮助!你的建议帮了我的忙:)在添加autoloader之前,有一个问题,在
示例插件
目录中,我使用了
\GuzzleHttp\Client
等类,这些类由位于
示例插件/functions/api
中的一个单独的composer.json/autoload.php文件链接,修复上述问题似乎破坏了现有的自动加载程序,您知道为什么会这样,以及我将如何维持现有功能吗?您可以将自动加载定义移动到api子目录的composer.json中,也可以将其自动加载移动到新的composer.json中,或者,您可以确保相应的代码路径使用正确的autoload.php。无论如何,最好让所有代码都同意使用同一个composer.json。我很困惑。只是澄清一下,GuzzleHttp\Client是由composer安装的依赖项,而不是我编写的类。它位于
示例插件/functions/api
中的
供应商
目录中,该目录与api目录本地的composer.json文件的位置相同。我尝试将psr-4定义移动到该文件,但没有成功。。。我不知道如何使
/vendor
类和私有类同时工作。因此,在api子目录中有一个composer.json文件。您确实可以拥有自己的PSR-4自定义类。听起来新的自动加载条款打破了以前的定义。检查差异?是的,没错。我需要两者都去工作,似乎其中一个占了上风。这些文件被忽略,所以我没有差异。我想知道我的composer.json中是否可以有多个psr子句,一个指向类,一个指向供应商。。?