php - 拦截对定义的 PHP 方法的调用

标签 php immutability value-objects

我正在尝试创建一个 Trait 来制作“可卡住值对象”。 (避免位置参数和伸缩构造函数。)这意味着可以使用 setter 来初始化对象,然后调用 ->freeze(),使对象“不可变”。 setter 仍会存在,但调用时会抛出异常。这可以通过在每个 setter 的开头调用 $this->assertIsWritable(); 来实现。但是我想避免这种情况(因为很容易忘记这样的电话)并自动进行此检查。有没有办法拦截对已定义方法的调用?

在解决方案中 Not Acceptable :

  • 破坏类型提示和/或静态代码分析的方法
  • 对特殊 PHP 扩展的依赖

我正在使用 PHP 7.0。

最佳答案

如果不修改运行时(使用扩展,如 Runkituopz 或在加载 PHP 代码时执行源代码转换(使用流包装器魔术),这是不可能的。

关于php - 拦截对定义的 PHP 方法的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756926/

相关文章:

rust - Rust 中的不可变变量和常量变量有什么区别?

c# - asp.net core 2.1 中的值对象作为无效对象

php - 需要帮助来设计休假申请模块 php 的数据库

php - 文本文件更新、添加和删除

php - 对如何将我的 PHP 项目放到 Internet 上一无所知

java - 为什么 Primitives 的包装类没有 setter?

PHP 搜索功能不检索结果

javascript - 状态没有更新

api - REST API 中的聚合值

nhibernate - 如何使用 Fluent NHibernate 自动映射一组组件?