草庐IT

php - 如何强制执行 protected 静态函数

我正在尝试编写一个抽象类(或接口(interface)),它强制扩展类实现protected静态函数。但这对于抽象类或接口(interface)都是不可能的。错误:静态函数不应该是抽象的必须省略接口(interface)成员的访问类型有什么想法可以实现吗?更新目的基本上是静态调用公共(public)函数。这样类就不需要实例化了。也没有必要使_doSpecificStuff()可从类外部代码调用。abstractclassFoo{publicstaticfunctiondoStuff(){[genericcode]static::_doSpecificStuff();}//sthlike

php通过变量类名访问静态成员

现在我正在使用yii框架,我想写这样的东西:protectedstatic$model="Customer";...publicfunctionactionIndex(){$model::model()->find(...现在可以了:protectedstatic$model="Customer";protectedstatic$model_obj;...publicfunction__construct($controller,$id){$this->model_obj=newself::$model;...publicfunctionactionIndex(){$model_obj

PHP 避免静态类以避免依赖,但我需要在任何地方使用全局

很多次我听说要避免静态类因为theywillinsertdependenciesthatwillrenderyourcodeunusableinotherprojects,andwillnotallowtounittestit.假设我们有一个典型的classDB来访问数据库,如果这样的类是static我们可以在我们的代码中的任何地方调用它:DB::execQuery(...);但是这会产生依赖性,所以让我们让DB类不是静态的,在这种情况下我们的代码中会有某处:$db=newDB();然后我们可以调用我们的代码$db->execQuery(...);但是现在当在function中使用$d

php - 范围解析运算符和类方法

好吧,我不明白这段代码为什么有效classMyObject{publicfunctionmyBaseMethod(){echo'I\'mdeclaredin'.__CLASS__;}}$instance=newMyObject();$instance->myBaseMethod();MyObject::myBaseMethod();//OutputI'mdeclaredinMyObjectI'mdeclaredinMyObject我可以通过创建MyObject类的新实例或作为静态方法来调用myBaseMethod()。但是myBaseMethod没有声明为静态的。我认为我只能将::用于

php - 数组的静态继承

我很难解释我正在尝试做什么,所以我只提供一个例子classA{static$data=['a'];staticfunctiongetData(){returnstatic::$data;}}classBextendsA{static$data=['b'];}classCextendsB{static$data=['c'];}classDextendsB{static$data=['d'];}$a=newA;$b=newB;$c=newC;$d=newD;$a::getData();//Output:Array('a'),Expected:Array('a');$b::getData()

PhpStorm - 如何检测 PHP 错误 "Non-static method should not be called statically"?

在PHP中,静态方法既可以在静态方法中使用,也可以在非静态方法中使用,非静态方法只能在非静态方法中使用。这就是静态调用动态方法会生成E_STRICT错误的原因。例如:bar();//Staticcallonanon-staticmethod//PHPError"Strictstandards:Non-staticmethodshouldnotbecalledstatically"//ERRORNOTDETECTEDBYPHPSTORM!echoExample::foo();最后一行将生成此PHP错误(这是逻辑):我目前正在开发一个大型PHP应用程序,该应用程序在某些PHP文件中静态调用

php - 在 PHP 中访问单例方法

我刚刚开始我的OOP之旅-我目前正在尝试推出我自己的MVC-纯粹出于学习目的。我正在学习ApressPHP-ObjectsPatternsPractice书中的一个教程。我使用私有(private)__construct/__clone技术创建了一个注册表单例对象:classRegistry{privatestatic$instance;private$values=array();privatefunction__construct(){}privatefunction__clone(){}publicstaticfunctiongetInstance(){if(!isset(sel

父类不能在静态上下文中使用 PHP const/static 变量

出于某种原因(哪个?),子类中定义的PHP常量/静态变量在父类的静态上下文中不可用。为什么?示例1:classModel{functiongetAll(){$query="SELECT*FROM".self::DATABASE_TABLE_NAME;//...}}classPostextendsModel{constDATABASE_TABLE_NAME='post';}$p=Post::getAll();当我运行时,我得到:Fatalerror:Undefinedclassconstant'DATABASE_TABLE_NAME'online3($query=...的行)示例2:cl

php - "static::function()"是什么意思?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:static::staticFunctionName()将关键字static放在函数调用之前意味着什么?代替类名。像这样:static::createKernel();

PHP: "Call to undefined method"... 但方法已定义?

我有一个Database.php类,它是一个抽象的Singleton类:其他数据库扩展了这个类并实现了抽象函数,这样我就可以改变我使用的数据库,同时确保我的应用程序仍然可以工作,只要它使用这个抽象层中的函数(我已经省略了函数定义来自上面的代码)。我在PDO.php中有一个PDO类。它扩展了数据库,还包括与上面相同的instance()函数,但它没有自己的$_instance变量。classPDOextendsDatabase{//...publicstaticfunctioninstance(){$class=get_called_class();if(!self::$_instanc