繁体   English   中英

从具有命名空间 (PHP) 的另一个类调用方法

[英]Call methods from another class with namespace (PHP)

我上课有问题。 我正在使用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 

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

在caseb.php

namespace Classes\B\CaseB;

use Classes\A\CaseA\ClassA;

class ClassB extends ClassA {

  public function MethodB()

  {

    $result = parent::MehodA();

    return $result;

  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM