【问题标题】:When a method should be static? PHP [duplicate]什么时候方法应该是静态的? PHP [重复]
【发布时间】:2012-09-15 03:52:43
【问题描述】:

我使用 PHP 作为我的编程语言。我真的不明白静态方法和变量的使用。

  1. 什么时候方法应该是静态的?/什么方法应该是静态的?
  2. 如何确定哪些方法应该是静态的?
  3. 静态方法和变量的优缺点?

谢谢

【问题讨论】:

  • 静态只是将过程代码分组到一个类中的一种奇特方式。除非常特殊的情况外,请避免使用它们。
  • 我不明白他们为什么要关闭我的问题?看起来不知道某事是犯罪:O
  • 当你试图用面向对象编程的语言工具来屏蔽你的过程代码时,方法应该是静态的。

标签: php oop class methods


【解决方案1】:

将类属性或方法声明为静态使它们无需实例化即可访问。声明为静态的属性不能用实例化的类对象访问(尽管静态方法可以)。

当您处理基于 OOP 的大型项目时,毫无疑问,您将使用许多类(父类和子类)。这样做的一个不幸结果是,为了访问来自不同类的元素,必须手动将它们传递给每个类(或者更糟的是,将实例存储在全局变量中)。这可能会非常令人沮丧,并可能导致代码混乱和整体糟糕的项目设计。值得庆幸的是,静态元素可以从任何上下文(即脚本中的任何位置)访问,因此您可以访问这些方法,而无需在对象之间传递类的实例。

也可以查看Does static method in PHP have any difference with non-static method?

【讨论】:

  • 为什么没有静态关键字的函数可以使用范围解析运算符访问?
  • 当我们可以继续使用 :: 调用函数时,为什么要创建对象?(假设我们将每个函数都设为静态)
  • @Dasun,如果你让每个对象都是静态的,那么他们就没有任何理由去创建对象。申请您​​没有使用公共实例变量。
  • 将每个变量和方法都设为静态是一种不好的做法吗?
【解决方案2】:

当方法没有绑定到实例变量时,它应该是静态的。如果它正在执行平面处理并从函数输入中获取所有变量。可以标记为静态。

它的优点是您无需创建实例来调用功能,因此可以节省内存。

【讨论】:

  • 为什么没有静态关键字的函数可以使用范围解析运算符访问?
【解决方案3】:

将类属性或方法声明为静态使它们无需实例化即可访问。实例化的类对象不能访问声明为静态的属性

<?php class Foo {
    public static function aStaticMethod() {
        // ...
    } }

$classname = 'Foo'; $classname::aStaticMethod(); // ( PHP 5.3.0) ?> 

"它可以在没有 OBJECT 的情况下启动"

【讨论】:

  • 当我们可以继续使用 :: 调用函数时,为什么要创建对象?(假设我们将每个函数都设为静态)
  • 好问题 :) 当您对方法使用 static 关键字时 > 您将自己直接耦合到类。多态和继承是不可能的,重视对象就是OOP范式。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 2016-02-15
  • 2011-03-23
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2015-10-15
相关资源
最近更新 更多