草庐IT

php - 静态关键字在 PHP 生成器函数中不起作用

似乎static关键字在生成器函数中不起作用?在PHP5.5中:functionstatic_fn(){static$p=0;echo"\nstatic_fn:p=".$p."\n";$p++;}echo"callingstatic_fn()\n";static_fn();echo"callingstatic_fn()\n";static_fn();functionstatic_gen(){static$p=0;echo"\nstatic_gen:p=".$p."\n";yield$p;}echo"callingstatic_gen()\n";foreach(static_gen()a

php - 在 PHP 中堆叠静态类

有没有办法创建一个静态类,其中它有另一个静态类作为成员?例如Parent_Class::Child_Class::Member_function(); 最佳答案 如果您指的是嵌套类,则不是。我相信它们会在某一时刻被引入,但最终被放弃了。有namespace支持,但是,如果这就是您所追求的。 关于php-在PHP中堆叠静态类,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/20164

php - PHP 函数可以返回对静态对象的引用吗?

假设我有一个静态对象:classeverything{publicstaticfunctionmust(){return"go!";}}当我这样做时:echoeverything::must();我收到回复:go!这是预期的行为。现在,出于我自己的原因(遗留代码支持),我希望能够从函数调用的返回中调用该静态对象,语法类似于:printaccessorFunction()::must();//OrsomethingasclosetoitaspossiblefunctionaccessorFunction(){returns(referenceto)everything;//Orsomet

php - 在对象上使用::运算符

最近我发现了有趣的代码用法,我不知道这是可能的。有人可以解释或给我手册页来解释为什么下面的代码有效吗?我知道::可用于反射(reflect)来自父类、静态等的方法或访问静态字段/方法,但引用$this看起来很奇怪,主要是因为方法a()不是静态的classTest{privatefunctiona(){echo'aworks';}publicstaticfunctionc(){echo'cworks';}publicfunctionb(){$this::a();//thisisweird$this::c();//alsothis$this->a();//normalusageself::

php - 引用 const 变量时 $this 或 self 或 static 哪个最好?

我了解到static比self好,因为self进行后期静态绑定(bind)。但我想知道哪种方法最适合引用const变量。classBlack{constcolor='black';publicfunctionbyThis(){return$this::color;}publicfunctionbySelf(){returnself::color;}publicfunctionbyStatic(){returnstatic::color;}}我检查了所有三个getter都工作正常。哪个是最好的选择?(我使用的是PHP7.0) 最佳答案

php - PHPUnit 中的模拟对象来模拟静态方法调用?

我正在尝试测试一个管理数据库中数据访问的类(您知道,本质上是CRUD)。我们正在使用的DB库恰好有一个API,您首先通过静态调用获取表对象:functiongetFoo($id){$MyTableRepresentation=DB_DataObject::factory("mytable");$MyTableRepresentation->get($id);...dosomestuffreturn$somedata}...你明白了。我们正在尝试测试此方法,但模拟了DataObject的东西,以便(a)我们不需要实际的数据库连接来进行测试,并且(b)我们甚至不需要包含DB_DataObj

php - PHP 匿名函数中静态变量的作用域

我遇到了一些麻烦,当我在一个方法中定义一个静态变量并多次调用它时,代码如下:functiontest(){static$object;if(is_null($object)){$object=newstdClass();}return$object;}var_dump(test());echo'';var_dump(test());输出如下:object(stdClass)[1]object(stdClass)[1]是的,他们返回相同的对象。但是,当我定义一个闭包结构时,它返回的不是同一个对象。functiontest($global){returnfunction($param)us

PHP:通过字符串值获取静态类的实例

我正在开发一个phpwebapi,它带有大量需要重构的代码。编写代码的人想要将静态配置类包含到api资源中,然后获取该类的实例,如下所示:checkMethod($method)){.....这给出了错误“解析错误:语法错误,意外的T_PAAMAYIM_NEKUDOTAYIMin.....”,因为$confObject是一个字符串而不是一个对象。我写了一些测试代码:";print_r($$class::Inst());echo"";classUser_conf{privatestatic$INSTANCE=null;publicstaticfunctionInst(){if(User_

PHP的静态成员和实例成员好像没什么区别。为什么 PHP 这样做(没有警告)?

staticFunc();//static这意味着在PHP中静态方法和实例方法完全没有区别。Zend甚至没有提示(没有警告)。在Zend引擎中。静态方法和实例方法都保存在zend_class_entry.function_table中。为什么PHP会这样?这是错误还是功能? 最佳答案 这可能与DoesstaticmethodinPHPhaveanydifferencewithnon-staticmethod?重复.如果启用了E_STRICT警告,您将收到一条错误消息,否则,您可以静默调用非静态方法,就好像它是静态方法一样。正如这里和

php - 从它自己的方法调用 PHP 构造函数

我一直在寻找一种方法来调用类似于“parent::_construct”的类的构造函数,但对于类本身(类似于“self::_construct”,虽然那行不通)。为什么要这样做?考虑以下(这不起作用,顺便说一句)...classA{var$name;function__construct($name){$this->name=$name;}functiongetClone($name){$newObj=self::__construct($name);return$newObj;}}classBextendsA{}在实际实现中,还有其他属性可以区分B类和A类,但两者都应具有“getCl