私有静态方法与静态方法

php
2022-08-30 11:32:44

我理解这意味着不需要实例化对象即可使该属性/方法可用。我也理解这如何适用于私有属性和方法以及公共方法。我试图理解的是静态私有函数给你带来什么。例如:static

class Beer {
    static private $beertype = "IPA";

    private function getBeerType() {
            return self::$beertype;
    }

    static public function BeerInfo() {
            return self::getBeerType();
    }
}

print Beer::BeerInfo() . "\n";

私有方法在没有实例化对象的情况下执行得很好,只要它是从静态公共方法调用的。如果静态公共方法有权访问所有私有方法(静态和非静态),那么声明静态私有方法有什么好处?getBeerType()

打开严格的错误报告后,我确实收到警告,说我应该使静态化,尽管它仍然允许我运行代码。我做了一些研究,似乎其他语言(Java)会迫使你在被静态公共方法调用时将私有方法声明为静态。看起来PHP可以让你逃脱这个。有没有办法强迫它抛出错误而不执行getBeerType()


答案 1

静态私有方法提供了一种从类外部隐藏静态代码的方法。如果几个不同的方法(静态或非静态)需要使用它,即代码重用,这可能很有用。

静态方法和静态变量(有时称为类方法和类变量)是一种将代码和数据放入某种命名空间的方法。您还可以将类变量视为附加到类本身的变量,其中(根据定义)正好有一个,而不是该类的实例,其中可能有零个,一个或多个。类方法和类变量在处理不仅在所有实例中都保持不变,而且实际上相同的属性非常有用。

类变量的一个示例是 ORM 实体对象中的数据库处理程序。所有实例都是它们自己的对象,但它们都需要访问一个数据库处理程序才能加载和保存它们自己。

私人与公共是一个完全独立的品质,我怀疑你绊倒了什么。不能调用私有方法,也不能从类外部的代码访问私有变量。私有方法通常用于在对象上实现“内部”逻辑,这些逻辑不得从对象外部访问。实例方法和类方法都可能需要此限制。

私有类方法的一个示例可能位于工厂方法中。可能有三个工厂调用来创建对象,这些对象在提供的参数上可能有所不同。然而,大部分操作是相同的。因此,它进入了非私有工厂方法调用的方法。private static


答案 2

我理解静态意味着对象不需要实例化即可使该属性/方法可用。

一切静态的东西都存在。全球。

我也理解这如何适用于公共属性和方法以及公共方法。

您确定您已经理解它创建了一个全局变量和一个标准的全局函数吗?

我试图理解的是静态私有函数给你带来什么。

私有只是可见性文档的说明符。因此,这可以获得您的可见性控制。

它有用吗?取决于用例。


推荐