【问题标题】:Using PHP Namespace for class yet receiving error of usage将 PHP 命名空间用于类但收到使用错误
【发布时间】:2019-07-22 10:49:35
【问题描述】:

我收到错误消息:Fatal error: Uncaught Error: Class 'Services\EncryptionService' not found

  • 课程在<root>\services\EncryptionService.php
  • 类在第一行有namespace Services;
  • <root>\db\db_change_password.php 中的 PHP 文件调用类
  • PHP 文件调用类在第一行有use Services\EncryptionService;

用法:

$encryption_service = new EncryptionService;
$encryptedPassword = $encryption_service->encrypt($password);

并提供致命错误。

编辑:

  • autoload_classmap.php
  • autoload_files.php
  • autoload_namespaces.php
  • autoload_psr4.php
  • autoload_real.php autoload_static.php

【问题讨论】:

  • 你的自动加载器是什么样子的?
  • 是的,如果你有 composer.json 文件,你需要给我们看
  • 注意大写字母“Services”。
  • 我被雇来处理旧代码,就其语法和用法而言,他们没有听说过 composer,无论如何,我已经安装了带有 diff 的 composer。供应商中的软件包,但除了 composer 之外没有根自动加载器。
  • 我不知道您是否说您正在使用自动加载器(应用程序中是否加载了作曲家自动加载器?)。如果没有,则需要在脚本中引入相关文件,PHP 不会自行自动包含文件/类。

标签: php


【解决方案1】:

我认为您应该使用自动加载类来加载您使用的任何类,如果您不使用并且您使用命名空间创建文件夹将此代码放在您创建的文件夹上的文件中,然后将其包含在索引中或在索引和 APP_PATH const 处包含项目路径希望对你有帮助

<?php


  namespace Services\lib;

  class Autoload
  {
    public static function autoload($className){
    //remove the main namespace
    $className=str_replace("Services","",$className);

    $className=str_replace("\\","/",$className);
    $className=$className.".php";
    $className=strtolower($className);
    //echo $className;
    if(file_exists(APP_PATH.$className)){
        require_once (APP_PATH.$className);
    }

  }

  }

spl_autoload_register(__NAMESPACE__.'\Autoload::autoload');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    相关资源
    最近更新 更多