我已经开始提高我的OOP技能,方法是在构建网站时解决一些相当简单的问题。所以它从登录系统开始,我遵循了youtube上的一个教程,它帮助我制作了一个登录类,但随着它的继续,它引起了很多疑问(顺便说一句。代码是100行,所以我会继续粘贴它).所以在这个Login类中,有验证方法等,但到了有session验证的地步,在构造之前给定的参数,它不能使用(至少在这个类范围内):$this->_username=($this->_login)?$this->filter($_POST['username']):$_SESSION['username'];$this->_password=($thi
我正在尝试编写一个PDO包装器,但我在构造函数方面遇到了一些问题。理想情况下,我想调用父级的构造函数,但由于某种原因,这是行不通的。我尝试(测试)检查是否创建了一个新的PDO并且确实有效,我发现这最令人困惑。这是我的代码:classdbextendsPDO{private$dbconn;publicfunction__construct(){$dsn='mysql:dbname='.MYSQL_DB.';host='.MYSQL_HOST;$user=MYSQL_USER;$pw=MYSQL_PW;try{$this->dbconn=parent::__construct($dsn,$
如何调用这样的东西:$instance=new($b->method($id))();method(int$id):string返回类名的地方?上面的构造给我一个语法错误,但这没关系:$className=$b->method($id);$instance=new$className();我只是想知道是否以及如何可以做到。我很惊讶括号不能说括号$b->method($id)的内容应该首先执行,结果字符串用于对象实例化。我可能不会在生产代码中使用它,但我仍然感兴趣。 最佳答案 这在PHP上是不可能的,因为“new”需要一个字符串或带有
我在网上学习模块,感觉js中的模块和php中的类很相似。两者将功能组合在一起,以便更容易理解编码。函数可以在两者中声明并公开或私有(private)。它们在使用上有何相似之处?它们有何不同? 最佳答案 Javascript的模块提供了一些不错的特性,例如封装、私有(private)状态,甚至是从其他模块继承。虽然它们提供了一些类的特性,就像在PHP中一样,但它们不是。他们试图在现有的Javascript功能的基础上构建来模拟类,因此造成了困惑。也就是说,它们看起来和感觉起来都像类。Javascript的模块是分配给变量的匿名函数的实
我在App\Utilities中有一个类Constant见下文:我可以回显Constant::WEEK_1它给我“第1周”,但是我想要的是动态调用constantweeksayforeach([1,2]as$key=>$num){echoConstant::'WEEK_'.$num}我得到一个解析错误。如何做到这一点?任何人?谢谢 最佳答案 我自己找到了答案:echoconstant('App\Utilities\Constant::WEEK_'.$num); 关于php-使用动态字符串
我有一个非常特殊的情况,我需要从类外部调用protected方法。我非常清楚我在编程方面所做的事情,但在我遇到的这种特殊情况下,我不会完全反对这样做。在所有其他情况下,我需要继续禁止访问内部方法,因此我想保护该方法。有哪些优雅的方法可以在类外访问protected方法?到目前为止,我找到了this.我想有可能创建目标类的某种双重代理实例,偷偷提供对内部的访问... 最佳答案 在PHP中,您可以使用反射来做到这一点。要调用protected或私有(private)方法,请使用setAccessible()方法http://php.ne
今天我偶然发现了一个有趣的问题。在多个声明的单个文件的上下文中,如果类B实现了接口(interface)A,并且类C扩展了类A,类B必须在类C之前声明。以下代码无效:interfaceA{}classCextendsB{}//Class'B'notfoundclassBimplementsA{}这修复了它:interfaceA{}classBimplementsA{}classCextendsB{}//Class'B'isfound但这工作正常:classA{}classCextendsB{}//Class'B'isfoundclassBextendsA{}这些是我在PHP5.3.8(
想象一下这个场景:classPage{}classBook{private$pages=array();publicfunction__construct(){}publicfunctionaddPage($pagename){array_push($this->pages,newPage($pagename));}}有没有办法确保只有我的Book类的对象才能实例化Page?就像,如果程序员尝试类似的事情:$page=newPage('pagename');脚本抛出异常?谢谢 最佳答案 这有点做作,但你可以使用这个:abstract
classMy_class{constSTATUS_ERROR=0;constSTATUS_OK=1;constDB_TABLE=TABLE_PREFIX.'class_table';}这两个状态常量工作正常,可以在类方法中访问为self::STATUS_ERROR和self::STATUS_OK就好了。问题之一是当我尝试定义第三个常量时如何阻止抛出以下错误。解析错误:语法错误,意外的“.”,需要“,”或“;”在/home/sub/sub/directory/script.php 最佳答案 你不知道。常数是常数。你不能在其中存储任何
我是MVC的新手,所以这是我的第一次尝试,我相信你们可以给我改进,感谢任何提示或帮助!下面是我为我正在开发的个人框架设计的路由/调度系统,这是我第一次尝试使用MVC模式。第一个代码块只是我的.htaccess文件,它通过我的index.php文件路由所有请求。第二个代码块是我的“Routes”数组,它将告诉Router对象,调用哪个类和方法以及任何ID或寻呼号码(如果存在)。第三个代码块是路由器类。第四block只是运行类因此路由器类必须使用正则表达式将URI与路由映射中的路由进行匹配,理论上,当正则表达式必须在50多个路由列表上运行时,这听起来像是性能不佳,应该我这样做不同吗?我使用