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
- 班级
<?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";
}
}