php对象工厂类完整示例

preview
需积分: 0 0 下载量 109 浏览量 更新于2020-10-18 收藏 34KB PDF 举报
在PHP编程中,对象工厂是一种设计模式,它用于创建对象,提供了一种抽象的方式来实例化对象,使得代码更具可扩展性和灵活性。通过对象工厂,我们可以根据需要动态地创建不同的对象,而无需直接硬编码特定类的实例化过程。在本示例中,我们将详细解析提供的`ObjectFactory`类。 `ObjectFactory`类定义了一个静态属性`$objSet`,用于存储已创建的对象。这个属性的作用是实现对象缓存,避免重复创建相同的对象,从而提高性能。 `clear()`方法用于清空`$objSet`数组,这在需要重新初始化或测试时非常有用。 `create()`方法是核心功能,它接收任意数量的参数。第一个参数是类名,后面的参数是构造函数所需的参数。`func_num_args()`和`func_get_args()`用于获取传入参数的数量和值。接着,`array_shift()`移除并返回数组的第一个元素,即类名,其余参数则作为构造函数的参数。 接下来,创建一个`$param_sign`,用于识别具有不同构造参数的对象。如果参数为空,`$class_sign`直接等于类名;否则,`$param_sign`将序列化参数(如果过长则进行MD5摘要),然后与类名组合成唯一的标识。 `if (isset(self::$objSet[$class_sign]))`检查是否已经存在相同标识的对象。如果存在,则直接从缓存中返回该对象,否则创建新对象。使用`ReflectionClass`来反射类,并通过`newInstanceArgs()`或`newInstance()`方法创建对象,取决于类的构造函数是否有参数。将新创建的对象存入`$objSet`。 这个对象工厂的示例还提供了一些PHP基础知识点,如: 1. **静态属性和方法**:`$objSet`和`create()`方法都是静态的,这意味着它们可以不依赖于类的实例而被调用。 2. **变量和数组操作**:使用`array_shift()`、`isset()`和`serialize()`等函数处理数组和变量。 3. **异常处理**:`throw new Exception('params error', 1);`抛出异常,当没有传递类名时提供错误信息。 4. **反射**:`ReflectionClass`用于动态地获取类的信息,如检查是否存在构造函数以及创建对象。 5. **魔术方法**:虽然示例中未提及,但`__construct()`是PHP的魔术方法,当创建类的新实例时会自动调用。 了解对象工厂模式在PHP中的应用,可以帮助我们编写更加灵活和可维护的代码。通过这种方式,我们可以将对象的创建与使用对象的代码分离,从而更容易替换或扩展对象类型,遵循“开闭原则”——对扩展开放,对修改关闭。此外,对象工厂还能促进依赖注入,使代码更加解耦,易于测试。