【发布时间】:2018-04-02 11:40:01
【问题描述】:
请帮助我。我需要更好地理解 PHP OOP 原则。
如果我有一个对于所有类实例都不可变的类属性,它应该被定义为静态吗? 如果是这样,有没有办法确保在该类型的所有类中都定义了静态属性?正如我在 PHP 手册中所读到的,静态属性既不能通过接口控制,也不能通过抽象类控制?还是我错了?
简单的例子。
<?php
// Parent class
abstract class Employee
{
abstract public function getAlias();
}
// Child classes
class Manager extends Employee
{
public function getAlias()
{
return 'manager';
}
}
class Security extends Employee
{
public function getAlias()
{
return 'security';
}
}
告诉我,alias 属性应该放在哪里?
我必须确保将来创建的任何 Employee 后代都将定义该属性。可以在动态方法中保留这种属性吗?还是应该放在常量、静态方法或静态属性中?
【问题讨论】:
-
你能解释一下,你打算用这个别名做什么?
-
例如,
alias属性(就任何类似属性而言)可以存储在 DB 表中并用于单表继承 - 根据检索到的 DB 记录的别名实例化一个适当的类。跨度> -
在这种情况下,您可以只使用实际的类名而不是别名。
Manager::class会给你完全限定的类名。另外,您的 ORM 不应该为您处理吗?不要误会我的意思。这是一个有效的问题。它只是闻起来像是可以或应该通过类型检查来处理的东西。但要决定这需要一些背景。 -
TBH,您的
Employee实例应该只包含业务逻辑或只包含SQL 代码。表名实际上应该通过配置来管理,而不是在类定义中硬编码。
标签: php oop architecture static