我理解这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让你逃脱这一点.有没有办法强制它抛出错误而不执行?
我在重定向STDOUT和STDERR时遇到了一个奇怪的问题.以下按预期工作:
$ gvim --version > /tmp/version.out
$ ls -l /tmp/version.out
-rw-r--r--. 1 blah blah 3419 Jun 27 17:28 /tmp/version.out
Run Code Online (Sandbox Code Playgroud)
输出文件中有3419个字符,当我查看文件时,它包含了我所期望的内容.
但是,当我执行以下操作时,它无法正常工作:
$ gvim --version > /tmp/version.out 2> /tmp/version.err
$ ls -latr /tmp/version.*
-rw-r--r--. 1 blah blah 0 Jun 27 17:29 /tmp/version.out
-rw-r--r--. 1 blah blah 0 Jun 27 17:29 /tmp/version.err
Run Code Online (Sandbox Code Playgroud)
请注意,.out和.err文件这次都是零长度.我尝试使用ls命令,它按预期工作:
$ ls . /ZZZ > /tmp/ls.out 2> /tmp/ls.err
$ ls -l /tmp/ls.*
-rw-r--r--. 1 blah blah 50 Jun 27 17:45 /tmp/ls.err
-rw-r--r--. 1 blah blah …Run Code Online (Sandbox Code Playgroud)