在PHP中获取扩展类的当前工作目录

Swa*_*der 4 php inheritance

我有一个抽象类"Class".Subclass类扩展了Class.Class抽象类具有以下调用:

is_readable('some_file.ext')
Run Code Online (Sandbox Code Playgroud)

如何强制抽象类的子节点在它们所在的文件夹中查找文件,而不是父抽象类的文件夹,而不覆盖子节点中的方法?

即如果摘要是在

类/摘要/ Class.php

而且孩子在

班/儿童/ Subclass.php,

如何让Subclass.php在classes/children /而不是classes/abstracts中查找some_file.ext,而不在子类中明确定义它?

Bai*_*ker 12

您可以使用它ReflectionClass::getFileName()来检索定义子类的文件名.

// In Superclass
public function isReadableFileInClassDir($file='somefile.ext') {
    $reflection = new ReflectionClass($this);
    $directory = dirname($reflection->getFileName()) . PATH_SEPARATOR;

    return is_readable($directory . $filename);
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为$this无论它在何处定义,都将始终引用实例化的类(而不是它的父级,即使$this在父级中找到它).