【问题标题】:Call methods from another class with namespace (PHP)使用命名空间(PHP)从另一个类调用方法
【发布时间】:2019-06-02 14:06:58
【问题描述】:

我的课程有问题。我正在使用 https://www.php-fig.org/psr/psr-4/ 自动加载类。

------------------------------------ /home/classes/a/casea.php

namespace Classes\A\CaseA;

class ClassA {

  public function MethodA()

  {

    $resultA = 'Method A works!';
    return $resultA;

  }

}

------------------------------------ /home/classes/b/caseb.php

namespace Classes\B\CaseB;

class ClassB {

  public function MethodB()

  {

    // Classes\A\CaseA\ClassA  MethodA() don't work here.
    // I tried this, but didn't work.
    $obj = new Classes\A\CaseA\ClassA;
    $result = $obj->MehodA();

    return $result;

  }

}

$classb = new Classes\B\CaseB\ClassB;
$show = $classb->MethodB();
echo $show;

------------------------------------ 自动加载

## PHP-FIG Autoload
spl_autoload_register(function ($class) {

    // project-specific namespace prefix
    $prefix = 'Classes\\';

    // base directory for the namespace prefix
    $base_dir = PATH . '/classes/';

    // does the class use the namespace prefix?
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        // no, move to the next registered autoloader
        return;
    }

    // get the relative class name
    $relative_class = substr($class, $len);

    // replace the namespace prefix with the base directory, replace namespace
    // separators with directory separators in the relative class name, append
    // with .php
    $file = $base_dir . strtolower(str_replace('\\', '/', $relative_class)) . '.php';

    // if the file exists, require it
    if (file_exists($file)) {
        require $file;
    }

});

错误是以下文本。

Fatal error: Uncaught Error: Class 'Classes\B\Classes\A\ClassA' not found in /home/domain.tld/classes/b/classb.php:11 Stack trace: #0 

【问题讨论】:

  • 你的自动加载在哪里?我只看到 2 个类。
  • 我添加了,非常感谢。
  • 要将代码格式化为代码,添加一个空行并将第一行代码缩进四个空格。 ;-)
  • 那么,当您尝试制作新的 ClassA 但它不起作用时,究竟会发生什么?有错误吗?
  • 另外,错过了自动加载注册。你如何连接文件?你有额外的文件吗? index.php 并从中调用您的自动加载,然后才调用 A 类和 B 类?

标签: php class oop namespaces


【解决方案1】:

我解决了这个问题,如果有人需要,可以使用以下代码。

在caseb.php中

namespace Classes\B\CaseB;

use Classes\A\CaseA\ClassA;

class ClassB extends ClassA {

  public function MethodB()

  {

    $result = parent::MehodA();

    return $result;

  }

}

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    相关资源
    最近更新 更多