【问题标题】:Static keyword usage php静态关键字使用php
【发布时间】:2012-09-18 23:29:18
【问题描述】:

假设我有一个类似以下的课程:

class MyClass {
  public function __construct($str) {
    // do some stuff including:
    $str = self::getIP($str);
  }

  private static function getIP($str) {
    return (bool) ip2long($str) ? $str : gethostbyname($str);
  }

  // other NON static functions ....
}

在上述场景中,getIP 静态与简单的优点/缺点是什么:

private function getIP($str) {
  return (bool) ip2long($str) ? $str : gethostbyname($str);
}

并在构造函数(或任何其他方法)中调用$this->getIP();

上下文:我通常会在没有 static 关键字的情况下执行此操作,但最近我遇到过几次。只是想知道当您绝对不打算使用它时使用静态是否有任何优势。

【问题讨论】:

  • 如果你想从你的类的另一个静态方法调用getIP,你会怎么做?

标签: php static static-methods


【解决方案1】:

在这种特殊情况下,我不确定。通常我使用静态方法,因为:

  • 它将数据存储在我希望从多个对象(有点像全局)访问的静态变量中
  • 我不想在每次调用该方法时都创建对象的实例——尤其是当它主要是从外部调用时。

例如,我通常会创建一个 App 对象,它有许多辅助方法。其中之一是fetch_db。每次我想连接到数据库时,我只需调用App::fetch_db()

【讨论】:

    【解决方案2】:

    在这种特定情况下,没有优势或劣势。但是,静态方法可以被其他静态方法使用(可能是一些public static 方法)。你确定它不是被另一个静态方法调用的吗?

    从技术上讲,任何不依赖$this 的方法都可以是静态的,只要它符合其接口即可(例如,如果父方法依赖$this 但子方法不依赖,则子方法不应该是静态)。

    【讨论】:

    • 是的,这正是我所理解的。只是想知道当您绝对不打算使用 $this 时使用静态是否有任何优势。
    • @Lizard 的优点是您不需要创建对象的实例(即,您永远不需要使用 new 关键字来使用该方法)。
    • @Explosion Pills - 注意它是私有的,因此会造成混乱
    • @Lizard 是的,但可能还有另一个 public static 方法使用这个私有方法。
    • 我确实在 Q 中声明有 other NON static functions
    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多