是否有可能获得PHP文件的位置,在运行时进行评估?我正在寻找类似于魔术常量__DIR__的东西,但在运行时进行评估,作为后期绑定.与自我和静态相似的区别:

__DIR__ ~ self

??? ~ static

我的目标是使用__DIR__在抽象类中定义一个方法,该方法将分别针对每个继承类进行评估.例:

abstract class Parent {

protected function getDir() {

// return __DIR__; // does not work

return <>; //

}

}

class Heir extends Parent {

public function doSomething() {

$heirDirectory = $this->getDir();

doStuff($heirDirectory);

}

}

显然,仅当Parent和Heir位于不同目录中时才会出现此问题.请考虑到这一点.此外,在各种Heir类中反复定义getDir似乎并不是选项,这就是为什么我们有继承…

解决方法:

您可以在Parent类的getDir方法中添加以下代码

$reflector = new ReflectionClass(get_class($this));

$filename = $reflector->getFileName();

return dirname($filename);

您的父类将如下所示

abstract class Parent {

protected function getDir() {

$reflector = new ReflectionClass(get_class($this));

$filename = $reflector->getFileName();

return dirname($filename);

}

}

希望它会有所帮助.

标签:php,inheritance,dir,late-binding

来源: https://codeday.me/bug/20190517/1121762.html

php 后期绑定,PHP __DIR__评估运行时(后期绑定)?相关推荐

  1. 运行时应用自我保护(RASP):应用安全的自我修养

    应用程序已经成为网络黑客想要渗透到企业内部的绝佳目标.因为他们知道如果能发现并利用应用程序的漏洞,他们就有超过三分之一的机会成功入侵.更重要的是,发现应用程序漏洞的可能性也很大.Contrast Se ...

  2. C专家编程 第11章 你懂得C,所以C++不再话下 11.13 多态---运行时绑定

    多态---运行时绑定     多态(polymorphism)源于希腊语,意思是"多种形状".在C++中,它的意思是支持相关的对象具有不同的成员函数(但原型相同),并允许对象与适当 ...

  3. ActiveReports中如何在后台导出运行时绑定数据源报表

    ActiveReports支持运行时绑定数据源功能,这种绑定数据源方法使用较为普及,然而很多系统中都需要在后台导出报表文件,所以用户就很困惑,ActiveReports中如何在后台导出运行时绑定数据源 ...

  4. 无法对 null 引用执行运行时绑定_你真的懂this吗?聊聊默认绑定,隐式绑定,显示绑定,new绑定...

    https://github.com/YvetteLau/Blog/issues/6 this关键字是JavaScript中最复杂的机制之一,是一个特别的关键字,被自动定义在所有函数的作用域中,但是相 ...

  5. 通过运行时单步调试弄清楚[(ngModel)]的双向绑定的工作原理

    Component HTML: <input type="text" maxlength="40" nz-input placeholder=" ...

  6. “项目运行时出错,无法启动调试。绑定句柄无效”的解决办法

    突然发现VS2005简体中文版不能调试,提示:"项目运行时出错,无法启动调试.绑定句柄无效."  结果重装.NET2.0也无效,又重装VS2005一次也无效,费了很大的周折,终于在 ...

  7. Python: 从PYTORCH导出模型到ONNX,并使用ONNX运行时运行它

    Python: 从PYTORCH导出模型到ONNX,并使用ONNX运行时运行它 本教程我们将描述如何将PyTorch中定义的模型转换为ONNX格式,然后使用ONNX运行时运行它. ONNX运行时是一个 ...

  8. 理解和选择运行时安全自保护-RASP

    定义RASP 运行时应用自我保护(RASP)是一种嵌入到应用程序或应用程序运行时环境的安全技术,在应用层检查请求,实时检测攻击和滥用. RASP产品通常包含以下功能: 通常在应用程序上下文中进行解包和 ...

  9. 【JVM】运行时数据区介绍,程序计数器和虚拟机栈详解

    JVM越来越是Java面试中的重头戏,今天来总结一下JVM运行时数据区的相关内容. 文章目录 JVM运行时数据区 JVM运行时数据区内部结构 程序计数器(PC寄存器) 程序计数器的介绍 PC寄存器的实 ...

最新文章

  1. Android笔记三十三.BroadcastReceiver使用
  2. c# typeof() 和 GetType()的区别
  3. 重拾CCNA,学习笔记持续更新ing......(4)
  4. 程序员修炼之路:你该知道的 7 个必经阶段
  5. 如何共享自己的mysql
  6. numpy列相加_Python数据分析入门:NumPy基础:数组与向量化计算
  7. 《系统集成项目管理工程师》必背100个知识点-02项目组织方式和特点
  8. es常用curl命令
  9. 软件:9款超级实用的办公软件,值得收藏!
  10. 用画小狗的方法来解释Java中的值传递
  11. 哈佛第二、哥大第三,第一还是它!2020USNews美国大学排名发布!
  12. 农村人深加工红薯,一招增值数倍,机器一条龙操作省人力
  13. PHP是4个进程还是五个,PHP多进程(4) :内部多进程
  14. Python中类和对象的概念,面向对象编程
  15. LeetCode 138. Copy List with Random Pointer
  16. k2路由器linux系统,【路由器】斐讯K1/K2刷专版潘多拉固件以及教程
  17. 抖音旋转很炫的html,火爆抖音的旋转时钟屏保,超酷超炫的
  18. 以前计算机学生都要学五笔吗,为什么曾经很火的五笔,还是给了拼音输入法?其实原因很简单...
  19. 方正平台(企业级应用的开发平台)
  20. VS code 快速配置C语言编写环境

热门文章

  1. Python突破拉钩反爬机制,采集各类招聘数据
  2. Python GUI篇——关不掉的小窗口
  3. Python爬取抖音app视频
  4. MySQL数据查询SELECT大全
  5. Hive 处理 json 数据
  6. github比sourceforge好在哪?
  7. Asp.net如何生成html静态页面
  8. google map的简单二次开发
  9. [Java] Spring事务REQUIRES_NEW导致项目没有响应-原因DB maxActive没设置
  10. leetcode —— 面试题 04.03. 特定深度节点链表