【发布时间】:2017-01-17 16:11:50
【问题描述】:
首先我要说明的是,我知道 OOP 的原理,并且知道类、方法、属性等术语的含义。
有时我需要创建可在全局范围内访问的函数并在它们之间共享数据。例如,我在项目中创建了基于 WordPress 概念的挂钩机制。
在 WordPress 中有 $wp_hooks 变量放置在全局范围内,并且有 add_action()、do_action()、add_filter()、apply_filter() 函数。每个函数都通过“global”关键字导入 $wp_hooks var。
在我的项目中,我创建了只有静态方法和属性的类。简单例子:
<?php
class Hooks
{
static private $_actions = [];
static private $_filters = [];
static public function addAction() { /* code... */ }
static public function addFilter() { /* code... */ }
static public function removeAction() { /* code... */ }
static public function removeFilter() { /* code... */ }
static public function runAction() { /* code... */ }
static public function applyFilter() { /* code... */ }
}
我知道不应以这种方式使用类。有单例模式,但我不喜欢它,也不想在我的项目中使用它。
最近我偶然了解到,我可以使用与类相同的特征,只使用静态方法。在 PHP 中,可以在特征中调用公共静态方法。
类和特征具有相同的语法和相似的能力(都可以包含函数和变量)。但是trait只是容器,没有特殊含义,当类有特殊含义时,idea——类是现实中某些对象组的抽象类(例如Person类或Product类)。
这是我的问题。你认为当我在只是容器而不是真实类的类中将“class”更改为“trait”时我会犯错吗?
(对不起,我的英语错误。;>)
【问题讨论】:
-
请不要将 WordPress 用作与软件架构/设计相关的任何示例。 ;)
-
我故意使用了这个比较。 ;-) 我知道 WordPress 代码是设计糟糕的代码的一个例子。而且我认为使用方法制作类/特征比在全局范围内使用变量更好。
标签: php