php - 在一个类中混合静态和非静态方法是否可以接受?

标签 php class static-functions

我有一个相对简单的问题,虽然谷歌上有很多关于它的帖子,但我找不到一个简单地回答这个问题的帖子。

所以简短的问题是“在一个类中混合静态和非静态方法是否可以接受?”。我想我真的在问“坚持使用一种方法是一种好习惯吗”,或者“在使用这两种方法时有什么需要考虑的事情”。

例如,如果我正在建立一个类(class)来处理我冰箱里的食物,以下哪个(或其他什么)是最好的方法

示例 1:

Class Food
{
    public function __construct( $itemName, $itemDescription )
    {
        .... some code for a new item of food ....
    }

    public static function getAllFood()
    {
        .... some code to get all the items in my fridge ....
    }
}

$food = new Food( "apple", "Nice juicy Pink Lady apple" );
Food::getAllFood();

或示例 2:
Class Food
{
    public function __construct( $itemName, $itemDescription )
    {
        .... some code for a new item of food ....
    }

    public function getAllFood()
    {
        .... some code to get all the items in my fridge ....
    }
}

$food = new Food( "apple", "Nice juicy Pink Lady apple" );
$food->getAllFood();

提前致谢

最佳答案

问:在一个类中混合静态和非静态方法是否可以接受?

答:当然可以,只要:

1) 你真的觉得这两种方法在逻辑上属于同一个类,并且

2)可以/应该独立于任何类实例调用静态方法。

最好的经验法则是在调用真正无状态时使用静态方法。

这是一个很好的讨论:

  • http://verraes.net/2014/06/when-to-use-static-methods-in-php/
  • 关于php - 在一个类中混合静态和非静态方法是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26746988/

    相关文章:

    c++ - 静态成员函数和线程安全

    php - AJAX 调用问题 - 没有数据传递(这里相对缺乏经验!)

    php - 将值与数据库表中的每一行进行比较

    java - java中的多态性解析父类和子类对象

    C++ : How do I call private methods through public ones?

    java - Android 静态函数

    c++从虚函数调用静态函数

    php - 安全密码存储

    php - 如何使用 mysql 中的数据实现嵌套 foreach?

    python - 为什么在全局范围而不是封闭范围中查找未初始化的类变量?