当我遇到一段奇怪的代码时,我正在阅读一本关于PHP的书:classEmployee{publicfunctionshow(){echo"showlaunched\n";}}Employee::show();我来自C++,所以我敢打赌这段代码行不通。这就是我测试它的原因。它成功了,显示“showlaunched”(天哪,我喝醉了吗?)!这似乎打破了类的方法可以在不实例化类的情况下被调用的概念。那么类中的静态标识符有什么意义呢?所有公共(public)函数也是静态的吗?真的,我错过了什么?提前致谢。添加:只是一个通知。我发现在这个book.第178-179页,它是作为正确示例给出的(如果我
为什么要在PHP5中使用静态变量或静态调用静态方法?也许是为了提高性能? 最佳答案 我们使用静态类变量在类的所有实例之间共享数据,我们使用静态方法(最好是privatestatic)来计算类功能所需的东西,但独立于类实例状态($this)。性能确实不是static存在的原因。这更像是一种副作用。 关于php-为什么要在PHP中使用静态调用?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi
此代码抛出解析错误,我不明白为什么。functiont(){return'g';}functionl(){static$b=t();return$b;}l();问题是,为什么? 最佳答案 引用手册:Note:Tryingtoassignvaluestothese[static]variableswhicharetheresultofexpressionswillcauseaparseerror.(我的重点)比较http://www.php.net/manual/en/language.variables.scope.php示例#7
目前,我正在安装PHPBB3.0.10并遇到此错误:严格标准:非静态方法utf_normalizer::nfc()不应在C:\xampp\htdocs\PHPBB\includes\utf\utf_tools.php1781行静态调用我试图在PHPBB论坛上找到这个问题的答案,但没有成功。我有一点PHP背景,但不了解来自动态函数的静态函数调用。我正在使用PHPv5.4.4、Apache2.4.2和Xampp1.8.0,如果其中任何一个相关的话。我也在我的本地主机上运行它,而不是在远程服务器上。为了引起这个错误,我所做的就是安装PHPBB。一旦我插入了数据库设置和管理员帐户设置,它就会出
我想以ISO8601格式获取服务器或客户端的当前日期/时间戳(例如2009年12月31日,02:53)。我知道可以使用PHP观察服务器时间并使用jQuery$.getJson将其带入DOM。可以使用javascript/jQuery从浏览器记录客户端时间。我希望时间戳是静态的(不是动态/实时的)。我是php/JS新手,非常感谢您的帮助。谢谢。 最佳答案 在PHP5中,你可以这样做date("c");//ISO8601date(addedinPHP5)参见date 关于php-获取当前的I
我正在尝试使为php5.3构建的脚本在php5.2服务器上运行。该脚本使用了很多后期静态绑定(bind),例如:returnnewstatic($options);在php5.2中与此等效的是什么?不知何故会是新的自己吗?还是不能达到同样的效果...谢谢编辑:这是一个相关问题Newselfvs.newstatic只是想把我的脑袋绕在这个晚期静态绑定(bind)的东西上...... 最佳答案 我认为唯一的方法是传递一个构建单例的protected静态方法和一个定义要使用的类的公共(public)静态方法。您可以使用get_class来
我正在使用SVN预提交Hook在能够提交之前验证我的代码标准(PSR2)。这非常有效,只有一个异常(exception)。我的单元测试(PHPUnit)文件存在于我的引导类中,存在于所有静态单元测试函数中,但也在引导类定义之上启用错误消息。PSR2标准会在尝试提交时发出警告,因为您不能在包含类定义的文件中拥有不在类或函数中的代码。有没有人有办法在我的代码嗅探器中排除这个错误,或者有办法使我的代码有效(无需将代码放入Bootstrap类的每个静态函数中以启用我的错误消息)?这是文件:array('module_paths'=>explode(PATH_SEPARATOR,$zf2Modu
我正在尝试在类中创建一个方法,该方法将实例化当前所在的类。但我还需要通过此方法在所有扩展类中正常工作。正如我从thisthread中了解到的那样,对此任务使用self关键字是不好的。显而易见的选择是使用static关键字。但是,我遇到了同样有效的不同方法。例子:classSimpleClass{private$arg;publicfunction__construct($arg){$this->arg=$arg;}publicfunctiongetArg(){return$this->arg;}publicfunctionsetArg($arg){$this->arg=$arg;}pu
这是来自static关键字PHP.net的文档:Apropertydeclaredasstaticcannotbeaccessedwithaninstantiatedclassobject(thoughastaticmethodcan).那么为什么下面的代码有效呢?这是他们的示例代码(我已经缩短了):为什么$foo::$my_static在这里仍然有效?谢谢大家! 最佳答案 A::(双冒号,或T_PAAMAYIM_NEKUDOTAYIM,如PHP解析器所称)被称为作用域解析运算符是有原因的。它解决了对对象引用的静态属性的访问。这在P
来自PHPmannual第二段,它说:static::introducesitsscope.我相应地尝试了以下示例:classFather{publicfunctiontest(){echostatic::$a;}}classSonextendsFather{protectedstatic$a='staticforwardscope';publicfunctiontest(){parent::test();}}$son=newSon();$son->test();//print"staticforwardscope"它按描述工作。但是,以下示例将引发fatalerror:classFa