【问题标题】:When to declare static property?什么时候声明静态属性?
【发布时间】:2016-10-06 21:46:19
【问题描述】:

我经常搞不清楚是使用静态属性还是只使用公共属性。
例如,我有一个班级 EventDispatcher,我想拥有最大侦听器和自动触发配置。
这个更好吗

<?php
class EventDispatcher
{
    public static $auto_trigger = 0;
    public static $max_listeners = 30;

或者这个

<?php
class EventDispatcher
{
    public $auto_trigger = 0;
    public $max_listeners = 30;

那么,哪个更好?
我很困惑,因为该属性是一个“配置”属性,而不仅仅是基本属性。

虽然我知道静态类就像全局类,非常易于访问,但我经常在选择静态与否时感到困惑。但在实际情况下,还是很难选择。

【问题讨论】:

  • @DanyalSandeelo 你误解了我的问题..这不是重复的..如果我做到了,换句话说,我的问题就像'静态,何时使用而不是常量或公共属性?'跨度>

标签: php oop properties


【解决方案1】:

总的来说,这取决于您要使用该属性的目的,但我通常避免使用静态属性,因为您可以从任何地方调用它们而无需创建对象的实例,而且我更喜欢一些封装,有 getter 和二传手等

如果您知道该属性是不会改变的,我建议您改用一个常量,您也可以在不创建对象实例的情况下访问它:

class BookModel {
    const TABLE_NAME = 'books';
}

echo BookModel::TABLE_NAME;

否则,我建议您保持属性非静态,以便将它们绑定到对象实例,您可以为其创建 getter 和 setter。

【讨论】:

  • 好吧,重点是……永远不要使用静态属性,对吧?因为我们可以改用常量,对吧?
  • 而且,永远不要使用公共财产,对吧?既然我们应该在 setter 和 getter 中让它正常运行,所以总是使用私有属性,对吧?
  • 好吧,“从不”有点极端,但通常你会犯更少的错误,你的代码会更干净,因为你将通过单一方法获取和设置你的属性,这意味着你如果您必须对属性进行一些操作,将不再重复。
  • "static" 有另一个特点 - 后期静态绑定,它允许您进行不使用 "const" ... php.net/manual/en/language.oop5.late-static-bindings.php 的事务
  • 因为您可以从任何地方调用它们而无需创建对象的实例 .. 这可能适用于公共可访问的属性和/或方法,但在隐藏可见性时则不然从课堂外使用privateprotected。如果不使用静态,我不知道单例模式的解决方案。我完全同意你的其余答案;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多