函数式编程在不同编程范式中的应用及辅助库使用
1. 函数式编程与面向对象编程
1.1 不可变对象的局限性
在创建对象时,即使试图构建不可变对象,仍存在一些问题。例如,对象变量并非完全不可变,可被新值或对象完全覆盖。虽然可以在类中添加 __destruct 方法,当对象被销毁(如被 unset 或覆盖)时抛出异常,但这存在两个问题:
- 脚本终止时,所有对象都会被销毁,每次脚本运行到此时都会抛出异常,可能影响其他对象析构函数的调用。
- 对象变量只是实际对象的引用,若创建一个不可变对象 $a ,再执行 $b = $a 并 unset($a) ,由于实际对象仍被 $b 引用, __destruct 方法不会触发。
1.2 对象属性作为外部状态
对象方法可视为函数,能用于函数组合,但对象属性可能成为问题。对象属性封装在对象内部,类似于闭包中封装值,但对象属性对对象内的所有方法(私有或公共)都可访问和修改,类似于类内的“全局”作用域。这在函数式编程中可能导致问题,因为不明确将属性作为参数传递给函数调用时,难以预测函数对于特定输入的输出。
以一个处理税收的类为例:
<?php
# Get our compose function
require '../Chapter 3/compose.php';
# This class will
超级会员免费看
订阅专栏 解锁全文
1042

被折叠的 条评论
为什么被折叠?



