我正在尝试使用self而不是在propery_exists函数中键入类名,如下所示:privatestaticfunctioninstantiate($record){$user=newself;foreach($recordas$name=>$value){if(isset($user->$name)||property_exists(self,$name)){$user->$name=$value;}}return$user;}但是当我运行这个脚本时出现错误:Notice:Useofundefinedconstantself-assumed'self'in/var/www/phot
我计划在phar存档中创建一堆PHP脚本(以便于部署)并允许它从已知存储库self更新。实时网站上的phar存档应如何self更新?不更新其内容,而只是替换自身(从之前下载到/tmp的new.phar或其他内容)就足够了。我特别担心在PHP中“替换我自己”的陷阱,同时考虑到可能正在进行的请求(该脚本将主要通过AJAX从Web调用)。 最佳答案 您可以检查Composer如何self更新:https://github.com/composer/composer/blob/master/src/Composer/Command/Self
我仍然是PHP的新手,所以请原谅这个问题,如果它看起来很愚蠢,但我想知道这是否是$_SERVER['PHP_SELF']的安全用法。从我读到它有什么问题(容易注入(inject)),我想知道比较它是否安全。例如,我希望PHP/CSS样式表根据用户所在的页面而改变,因此在PHP/CSS中,它会有一个if语句检查$_SERVER['PHP_SELF']查看他们访问的页面是否需要不同的样式表。例子:if($_SERVER['PHP_SELF']===$thisPage){}恶意代码会以这种方式影响我吗?我可以简单地验证/清理它,然后使用它吗? 最佳答案
举一个人为的例子,我想通过回调函数从另一个上下文调用一个protectedstatic方法:classFoo{protectedstaticfunctiontoBeCalled(){}publicstaticfunctionbar(){functionThatAcceptsACallback(function(){self::toBeCalled();});}}这在PHP5.3中可行吗?我找不到让它工作的方法... 最佳答案 It'snotpossible,但它将在5.4中与闭包中的$this支持一起出现。Addedclosure$
你能告诉我returnself::__construct()和returnnewself()之间的确切区别吗?看起来实际上可以在创建对象时从__construct()调用返回一个self::__construct(),返回对象本身就像第一个__construct()从未被调用过。 最佳答案 这在代码中得到了最好的说明:classMyClass{public$arg;publicfunction__construct($arg=NULL){if($arg!==NULL)$this->arg=$arg;return$this->arg;
为什么在此示例中对非静态方法的“self”调用有效?classA{protectedfunctionaNonStaticMethod(){return__class__;}publicfunctionaEcho(){echoself::aNonStaticMethod();}}感谢您的解释。 最佳答案 在您的简单示例中,$this和self是可以互换的。但要注意处理继承时解析的不同方法(为了完整性我添加了静态):classA{protectedfunctionaNonStaticMethod(){return__class__;}p
如前所述onReddit'sLOLPHPsub,PHP7在引用self时可以使用扩展类或基类,而PHP5总是引用扩展类。TryitonlinePHP5string(8)"BarABarC"PHP7string(8)"FooABarC"PHP7的行为尤其令人担忧,因为似乎没有任何简单的规则可以知道self何时引用基类或扩展类。在PHP7中确定self将引用哪个类的规则是什么? 最佳答案 self::应该始终引用它在其中使用的类(注意PHP5的行为也是错误的。)这是一个bug,fixed在7.1.4,这仅适用于类常量内的self::和p
我已经使用composer大约一个月了。然后有一天composer向我展示了这条消息:Warning:Thisdevelopmentbuildofcomposerisover30daysold.Itisrecommendedtoupdateitbyrunning"/usr/local/bin/composerself-update"togetthelatestversion.我已经按照文档全局安装了composer。whichcomposer/usr/local/bin/composer运行sudocomposerself-update给我这条信息:/usr/bin/env:php:N
当我尝试self更新我的Composer时,我收到“权限被拒绝”错误。即使当我使用sudo/usr/bin/composer.pharself-update时,它也会显示commandnotfound。请帮帮我,我对Composer一无所知 最佳答案 尝试以下命令:sudophp/usr/bin/composer.pharself-update确保composer.phar文件存在于“/usr/bin” 关于php-尝试self更新Composer时权限被拒绝,我们在StackOverf
我见过几个线程,人们在其中询问如何在PHP中获取类或对象的名称。但是,我在任何地方都看不到所解释的各种可能性之间的区别。我希望这里有人可以帮助我。所以为了得到被调用类的类名,我知道两种可能:get_called_class()static::class(非静态类的get_class($this))为了获取放置代码的类的类名,我知道这三种可能性:get_class()__CLASS__self::class是否有任何我现在可以忽略的差异?一种方式相对于另一种方式的潜在优势和劣势是什么? 最佳答案 之间的差异get_class()ret