【问题标题】:PHP namespaces issue with sub-folders子文件夹的 PHP 命名空间问题
【发布时间】:2019-09-28 15:22:38
【问题描述】:

我有一个非常简单的网络应用程序。学习如何使用命名空间。

目录结构是:

  • www(根)
    • 类(应用程序目录)
      • index.php
      • payment(命名空间的子目录)
        • card.php(单独的类,命名空间)
      • gameplay(命名空间的子目录)
        • card.php(单独的类, 命名空间)

代码如下:

index.php

<?php 
    function my_autoload_function($c)
    {
        require_once "class/".str_replace("\\","/",$c).".php";      
    }

    spl_autoload_register('my_autoload_function');

    $gpcard=new \gameplay\card;
    $gpcard->play();
?>

card.php(子文件夹支付)

<?php 
    namespace payment;
    class Card
    {
        public function pay()
        {
            echo "Pay to play";
        }
    }
?>

card.php(子文件夹游戏)

<?php 
    namespace gameplay;
    class Card
    {
        public function play()
        {
            echo "Play game";
        }
    }
?>

我得到的错误信息是:

警告:require_once(class/gameplay/card.php):打开流失败:第 4 行的 C:\wamp64\www\class\index.php 中没有这样的文件或目录 致命错误:require_once():无法在第 4 行的 C:\wamp64\www\class\index.php 中打开所需的 'class/gameplay/card.php' (include_path='.;C:\php\pear')

虽然所有文件和子文件夹(命名空间)都存在,但还是有问题。

有人可以帮忙吗?

【问题讨论】:

  • 我要注意的一件事是与名称/文件名的大小写保持一致。 Windows 没问题,但 *nix 对文件名区分大小写。因此,请确保始终使用 Card 作为类名和文件名。
  • 我根据您的建议进行了两次更正,但仍然无效。无论如何,这是 Windows 10

标签: php


【解决方案1】:

这个 index.php 文件可以工作,如果它被移动一个目录级别更高。
它应该在 /www 目录中,而不是在 /class 中,因为它在路径中添加了“类”。
如果你在 /class 下需要它,你需要

require_once str_replace("\\","/",$c).".php";

【讨论】:

    【解决方案2】:

    您可以在此处查看它在小型框架上的工作方式: https://github.com/breakermind/Tronix/blob/master/router.php 并在这里自动加载: https://github.com/breakermind/Tronix/blob/master/classes/autoload.php

    classes/Folder1/Folder2/ClassName.php

    // index.php
    require_once($_SERVER['DOCUMENT_ROOT'].'/classes/autoload.php');
    use Folder1\Folder2\ClassName;
    
    ClassName cl = new ClassName();
    
    
    
    // Class file path classes\Folder1\Folder2\ClassName.php  
    namespace Folder1\Folder2;
    
    class ClassName{
        // Do something...methods...variables ...
    }
    

    类似的东西

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 2016-07-05
      相关资源
      最近更新 更多