私有静态方法与静态方法

Mac*_*ber 37 php

我理解这static意味着不需要实例化对象以使该属性/方法可用.我也理解这如何适用于私有属性和方法以及公共方法.我想要了解的是静态私有函数会让你获益.例如:

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

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

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

print Beer::BeerInfo() . "\n";
Run Code Online (Sandbox Code Playgroud)

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

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

sta*_*san 33

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

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

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

私人与公共是一种完全独立的品质,我怀疑你磕磕绊绊的是什么.无法调用私有方法,并且无法从类外部的代码访问私有变量.私有方法通常用于在对象上实现必须无法从对象外部访问的"内部"逻辑.实例方法和类方法可能需要这种限制.

私有类方法的示例可以是工厂方法.可能有三个工厂调用用于创建可能与提供的参数不同的对象.然而,大部分操作都是一样的.所以它进入private static了非私有工厂方法调用的方法.


hak*_*kre 7

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

一切都是静态存在的.在全球范围内.

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

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

我想要了解的是静态私有函数会让你获益.

私人仅仅是一个符可见性文件.这样可以获得可视性控制.

它有用吗?取决于用例.


Xav*_*ero 5

这是为了防止他人食用它。

例如,您有一个Logger静态对象,然后有两个公共静态方法LogOkLogError并且都从“内部”方法中受益,Log但是您不希望该类的使用者能够Log直接调用。

您可以呼叫,Logger::LogOk( "All right." );Logger::Log( "abc" );如果Log是私人则不能呼叫。

您可以在内部始终使用同一类中的它。


Aur*_*osa 4

尽管代码有效,但它会引发严格标准错误:

严格标准:非静态方法 Beer::getBeerType() 不应静态调用

所以,在这里你可以使用private static.

  • 好的,我打开了 STRICT 错误报告,现在确实看到了这些警告。 (4认同)