Php Composer-自动加载后未找到类

Php Composer-自动加载后未找到类,php,composer-php,Php,Composer Php,我的班级结构如下: myproject | -------src (namespace PicoCore;) | -----objects (namespace PicoCore\Objects;) -----tests (namespace PicoCore\Tests;) 我通过自动加载创建了composer.json: { "autoload": { "psr-0": {

我的班级结构如下:

myproject
    |
    -------src (namespace PicoCore;)
            |
            -----objects (namespace PicoCore\Objects;)
            -----tests (namespace PicoCore\Tests;)
我通过自动加载创建了composer.json:

{
    "autoload": {
        "psr-0": {
            "PicoCore": "src",
            "PicoCore\\Objects" : "src/objects",
            "PicoCore\\Tests" : "src/tests"
        }
    }
}
安装后,我创建了一个测试脚本:

<?php

require_once "../../vendor/autoload.php";

use PicoCore\Objects\User;

$user = new User();
$user->name = "asaf";
echo $user->name;

?>

用户类别:

<?php
/**
 * Created by PhpStorm.
 * User: avivpaz
 * Date: 12/25/14
 * Time: 12:07 PM
 */

namespace PicoCore\Objects;

class User extends APIUser implements ConvertibleObjects
{


    /**
     * @var string User's Name
     */
    public $name;



    /**
     * @var string User's Push Id
     */
    public $pushId;


    /**
     * @var UserDevice User's device type
     */
    public $userDevice;

    /**
     * @var double The location latitude
     */
    public $latitude;

    /**
     * @var double The location longitude
     */
    public $longitude;

    public function __construct()
    {
        $this->label = USER_LABEL;
    }

    /**
     * init with APIUser
     * @param $APIUser APIUser
     * @return User type
     */
    public static function withAPIUser($APIUser)
    {
        $user = new User();
        $user->label=USER_LABEL;
        $user->id = $APIUser->id;
        $user->facebookAccessToken = $APIUser->facebookAccessToken;
        $user->picoAccessToken = $APIUser->picoAccessToken;
        $user->accessTokenExpires = $APIUser->accessTokenExpires;
        return $user;

    }

    public function ConvertObjectToCypherSyntax()
    {
        return '{id:"' . $this->id . '",name:"' . $this->name . '",picoAccessToken:"' . $this->picoAccessToken . '",accessTokenExpires:"' . $this->accessTokenExpires->getTimestamp() . '",latitude:' . $this->latitude . ',longitude:' . $this->longitude . '}';

    }

    static public function  ConvertNodeToObject($results)
    {
        $user = new User();
        if (is_null($results))
            return $user;
        $user->id = $results->getProperty('id');
        $user->name = $results->getProperty('name');
        $user->picoAccessToken = $results->getProperty('picoAccessToken');
        $user->latitude = $results->getProperty('latitude');
        $user->longitude = $results->getProperty('longitude');
        //    $user->userDevice = UserDevice::ConvertNodeToObject($results['userDevice']);
        if (!$results->getProperty('accessTokenExpires') == "")
            $user->accessTokenExpires = getDateTimeFromTimeStamp($results->getProperty('accessTokenExpires'));
        return $user;
    }

    static public function ConvertArrayToObject($array) {
      $user = new User();

      if (array_key_exists("id", $array))
        $user->id = $array["id"];
      if (array_key_exists("name", $array))
        $user->name = $array["name"];
      if (array_key_exists("pico_access_token", $array))
        $user->picoAcceessToken = $array["pico_access_token"];
      if (array_key_exists("access_token_expires", $array))
        $user->accessTokenExpires = getDateTimeFromString($array["access_token_expires"]);
      if (array_key_exists("device_type", $array))
        $user->deviceType = $array["device_type"];
      if (array_key_exists("latitude", $array))
        $user->latitude = $array["latitude"];
      if (array_key_exists("longitude", $array))
        $user->longitude = $array["longitude"];
      if (array_key_exists("userDevice", $array))
        $user->userDevice = UserDevice::ConvertArrayToObject($array["userDevice"]);

      return $user;
    }

    public function toArray()
    {
        $user = array();

        if (!empty($this->id))
            $user["id"] = $this->id;
        if (!empty($this->name))
            $user["name"] = urldecode($this->name);
        if (!empty($this->picoAccessToken))
            $user["pico_access_token"] = $this->picoAccessToken;
        if (!empty($this->accessTokenExpires))
            $user["access_token_expires"] = getMysqlDateTime($this->accessTokenExpires);
        if (!empty($this->latitude))
            $user["latitude"] = $this->latitude;
        if (!empty($this->longitude))
            $user["longitude"] = $this->longitude;
        if (isset($this->userDevice)) {
            $userDevice = $this->userDevice->toArray();
            if (!empty($userDevice))
                $user["userDevice"] = $userDevice;
        }
        if (count($user) > 0)
            return $user;
        return null;
    }
}

如果它是一个没有类的名称空间,那么它必须以\\
因此:

并检查文件自动加载

composer/autoload_namespace.php

请参见带有PSR-0的

为了使用PSR-0,您需要将结构布局更改为:

src/
└── PicoCore
    ├── Objects
    │   └── User.php
    └── Tests
在composer.json中,您需要添加
PicoCore
名称空间:

"psr-0": {
    "PicoCore\\": "src"
}
PSR-4替代方案 如果要保持当前的文件系统布局,可以使用PSR-4而不是PSR-0。为了使用PSR-4,您需要更新composer.json:

"autoload": {
    "psr-4": {
        "PicoCore\\": "src",
        "PicoCore\\Objects\\" : "src/objects",
        "PicoCore\\Tests\\" : "src/tests"
    }
}

进行更改后,请运行
composer dumpautoload
以重新生成自动加载文件。

这样做有效吗$user=new PicoCore\Objects\user()?你能发布
用户
类的内容吗?@bub不,它不…@AlexandruGuzinschi更新了我的问题,有效!我还必须将require once行更改为:require_once DIR。“/../vendor/autoload.php”;在src“PicoCore\\”之后添加尾随斜杠:“src/”composer/autoload_namespace.php的内容是什么?它是psr-4的一部分,而不是0
"autoload": {
    "psr-4": {
        "PicoCore\\": "src",
        "PicoCore\\Objects\\" : "src/objects",
        "PicoCore\\Tests\\" : "src/tests"
    }
}