这个问题在这里已经有了答案:Newselfvs.newstatic(3个答案)关闭6年前。我有一个类作为基类。然后我有几个继承自它的其他类。我想使用静态语法开始加载继承的类,但这种行为没有多大意义。直到现在,我都是这样加载类的,它完成了工作。$obj=newfoo();$something=$obj->ByID(1);我希望能够像这样调用ByID函数。$something=foo::Get()->ByID(1);上面的代码是有效的,但它不是调用继承类,而是加载基类。我想我明白为什么会这样,但这没有任何意义。在.NET中,“this”将始终应用于继承的对象,但在我这里它不是这样工作的。我
为什么$_SERVER['PHP_SELF']返回/index.php/index.php??请求http://example.com输出/index.php/index.php索引.phpnginx.confserver{listen80;server_namedomain.com;root/var/www/public/www;#Addtrailingslashrewrite^([^.\?]*[^/])$$1/permanent;location/{try_files$uri$uri//index.php?$query_string;}location~\.php${include
我了解到static比self好,因为self进行后期静态绑定(bind)。但我想知道哪种方法最适合引用const变量。classBlack{constcolor='black';publicfunctionbyThis(){return$this::color;}publicfunctionbySelf(){returnself::color;}publicfunctionbyStatic(){returnstatic::color;}}我检查了所有三个getter都工作正常。哪个是最好的选择?(我使用的是PHP7.0) 最佳答案
我试图在对象实例化时创建一个文件,并在对象销毁时创建另一个文件。代码如下:classFoo{publicfunction__construct(){file_put_contents('a_construct.txt','c');}publicfunction__destruct(){file_put_contents('a_destruct.txt','d');}}通常会创建a_construct.txt文件。但是在创建a_destruct.txt文件时,它的行为很奇怪。如果我运行以下代码,“a_destruct”文件不会被创建。$foo=newFoo();我得到这个错误:Warni
在PHP中不可能returnself链接静态方法。这限制了静态方法的使用,因为链接非常有用,您必须使用实例来链接方法。PHP开发人员决定不允许返回self有什么原因吗?或者一般来说在OOP中是不可能返回self的? 最佳答案 尝试returnnewstatic()或returnnewself():classCalculator{privatestatic$_var=0;publicstaticfunctionstartFrom($var){self::$_var=$var;returnnewstatic();}publicstati
使用$_SERVER['REQUEST_URI']或$_SERVER['PHP_SELF']作为表单中的操作或作为href链接?如果是这样,可以采取哪些措施来降低风险? 最佳答案 您在www.example.com/form.php上创建了一个表单。一年后,您会忘记URL只是抓取页面加载的任何URL。假设您在某个时候在您的框架中添加了一个“删除所有内容”全局选项,作为一个完全不同(有点奇怪)请求的一部分。现在,有人向您发送此链接:www.example.com/form.php?delete_everything=true。因为您只
虽然这个问题有点与语言无关(就支持Traits的OOP语言而言)我一直在修补PHP5.4a的夜间构建,并遇到了一个奇怪的场景。我似乎无法再运行我的安装,但那是另一回事了。给定以下代码段:traitMyTrait{publicfunctionmyMethod(self$object){var_dump($object);}}classMyClass{useMyTrait;}$myObject=newMyClass();$myObject->myMethod('foobar');//应该发生什么?我希望出现错误,指示$object需要是MyClass的实例。当trait方法被复制到一个us
我有以下相关代码:try{self::$db=newPDO($dsn,self::USER,SELF::PASS);//Connecttothedatabase,andstorethepdoobject.self::$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}catch(PDOException$e){thrownewException("Therehavebeenanerrorintheconnection:".$e->getMessage());}执行此代码所在的静态函数时,出现以下错误:Fatalerr
以下是完整的警告信息:Warningin.\libraries\session.inc.php#101session_start():Thesessionidistoolongorcontainsillegalcharacters,validcharactersarea-z,A-Z,0-9and'-,'Backtrace.\libraries\session.inc.php#101:session_start().\libraries\common.inc.php#352:require(.\libraries\session.inc.php).\index.php#12:requir
我刚刚注意到如果在__destruct()魔术函数中调用getcwd()会返回“/”,而在任何其他方法中它会返回预期的路径。你对此有解释吗? 最佳答案 这是一个SAPI行为“在脚本关闭期间调用的析构函数已经发送了HTTPheader。脚本关闭阶段的工作目录可能与某些SAPI(例如Apache)不同。”来自http://php.net/manual/en/language.oop5.decon.php但是正如其他答案中提到的那样,有很多方法可以获取当前的相对路径。如果您在运行时更改了它,请务必在对象内部的某处进行注释。