Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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_Namespaces_Autoload - Fatal编程技术网

PHP自动加载程序不使用名称空间

PHP自动加载程序不使用名称空间,php,namespaces,autoload,Php,Namespaces,Autoload,这是第一次使用自动加载器时出现一些错误。 结构如下: 动物商店(根) 班级 Shop.php index.php 我有以下简单的代码 Index.php <?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); echo "<h1>PETs SHOP</h1>"; // Create a shop $shop = new

这是第一次使用自动加载器时出现一些错误。 结构如下:

  • 动物商店(根)
    • 班级
      • Shop.php
    • index.php
我有以下简单的代码

Index.php

<?php

spl_autoload_register(function ($class_name) 
{
    include $class_name . '.php';
});

echo "<h1>PETs SHOP</h1>";

// Create a shop

$shop = new Shop();
<?php

// Autoload
require "vendor/autoload.php";

use App\Shop\PetShop;
use App\Pets\Dog;
use App\Pets\Fish;
use App\Pets\Cat;

echo "<h1>PETs SHOP</h1>";

// Create a shop
$shop = new PetShop();

$shop->addPetsToArray(new Dog("Yuki"));
$shop->addPetsToArray(new Fish("BLubie"));
$shop->addPetsToArray(new Cat("Cattie"));

$shop->printPets();


你走错了路。。试试这个..

为了解决这个问题,我使用PSR-4通过composer自动加载,其结构和代码如下

结构

  • 动物商店(根)
    • index.php
    • 应用程序(文件夹)
      • 行为(文件夹)
        • WalkBehavior.php(接口)
      • 宠物(文件夹)
        • Cat.php
        • Dog.php
        • Fish.php
        • Pets.php(抽象类)
      • 商店(文件夹)
        • PetShop.php
Composer.json

{
    "autoload" : {
        "psr-4" : {
            "App\\" : "App"
        }
    }
}
index.php

<?php

spl_autoload_register(function ($class_name) 
{
    include $class_name . '.php';
});

echo "<h1>PETs SHOP</h1>";

// Create a shop

$shop = new Shop();
<?php

// Autoload
require "vendor/autoload.php";

use App\Shop\PetShop;
use App\Pets\Dog;
use App\Pets\Fish;
use App\Pets\Cat;

echo "<h1>PETs SHOP</h1>";

// Create a shop
$shop = new PetShop();

$shop->addPetsToArray(new Dog("Yuki"));
$shop->addPetsToArray(new Fish("BLubie"));
$shop->addPetsToArray(new Cat("Cattie"));

$shop->printPets();

shop.php
位于
/var/www/phpadvancedCourse/AnimalShop/
?nvm我在你的问题中看到了。
包括“类/”$类名。php′作为旁注,这是一种使用名称空间和自动加载器的奇怪方式。您应该查看上面的代码不起作用。我得到的错误是:致命错误:未捕获错误:第12行的/var/www/phpadvancedCourse/AnimalShop/index.php中找不到类“Shop”错误:第12行的/var/www/phpadvancedcource/AnimalShop/index.php中找不到类“Shop”你没有用我的密码。你为什么不试试我给你的代码,然后说它不起作用呢。
<?php

namespace App\Shop;

use App\Pets\Pets;

/*
 * Pet shop
 */

class PetShop
{

    /**
     * @var Pets[] pets
     */
    private $pets = [];

    public function addPetsToArray(Pets $pet)
    {
        $this->pets[] = $pet;
    }


    /**
     * Print pets naam
     */
    public function printPets()
    {
        foreach($this->pets as $pet)
        {
            echo "<p>" . $pet->getPetNaam() . "</p>";
        }
    }
}
<?php
namespace App\Pets;

/**
 * Class Dog
 */
class Dog extends Pets
{
    /**
     * Dog constructor.
     *
     * @param $name
     */
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function walk() : string
    {
        return "Dog is walking";
    }
}