我们可以在PHP中动态创建和初始化对象吗?这是正常的代码:class MyClass{var $var1 = null;var $var2 = null;..public function __construct($args){foreach($args as $key => $value)$this->$key = $value;} } --------------------- $args = ($_SERVER['REQUEST_METHOD'] == "POST") ? $_POST : $_REQUEST; $obj = new MyClass($args);上面的代码工作正常.请注意,REQUEST参数的名称与MyClass类的成员准确对应. 但我们可以做这样...
我一直认为 – 在没有构造函数参数的情况下 – 括号(花括号)在创建类实例时遵循类名,是可选的,并且您可以根据自己的想法包含或排除它们. 这两个陈述是平等的:$foo = new bar; $foo = new bar();我对吗?或者对我不知道的括号有一些意义吗? 我知道这听起来像一个RTM问题,但我一直在寻找(包括整个PHP OOP部分),我似乎无法找到一个直接的答案.解决方法:它们是等价的.如果你不是任何code convention的编码,请使用你更喜欢的.就个人而...
我已经写了一个与购物车的前端(Web浏览器端)一起工作的课程. 这很简单,因为我向类发送了一个我埋在URL中的产品ID,然后查询填充类变量的数据库,以便通过一些公共方法检索数据. 为了与我的实际物理网页交互,我有一个文件,我称之为viewFunctions.php.其中我实例化我的名为ItemViewPackage()的类:<?php require_once(dirname(__FILE__) . '/ItemViewPackage.php'); $viewObject = new ItemViewPackage($_GET['page']);所以,我有shoppi...
我试过这两种方式:(new NewsForm())->getWidgetSchema();{new NewsForm()}->getWidgetSchema();没有运气……解决方法:你不能在一条指令中调用instanciation和方法……但是“欺骗”的方法是创建一个函数来返回你正在使用的类的实例 – 然后,调用一个方法返回对象的函数:function my_function() {return new MyClass(); } my_function()->myMethod();并且,在这种情况下,有一个有用的技巧:类的名称和函数的名称不属于同一名称空间 ...
在代码的开头根据需要或正确实例化对象是“更好”吗?注意在示例中,可能不需要obj2的功能.obj1 = new Object1(); obj2 = new Object2();obj1->run;//lots of codeif (condition) {obj2->doThis(); }要么obj1 = new Object1(); obj1->run;//lots of codeif (condition) {obj2 = new Object2();obj2->doThis(); }解决方法:只有2条规则 >如果不需要,请不要实例化任何对象.>在您需要之前实例化.并且当不再需要它时破坏它们. 不必要的对...
以下所有示例都基于所有文件都存在于正确位置的保证.我高音检查过这个. (1)这在不使用命名空间时有效:$a = "ClassName"; $b = new $a();这不起作用:// 'class not found' error, even though file is therenamespace path\to\here; $a = "ClassName"; $b = new $a();这个工作:namespace path\to\here; $a = "path\to\here\ClassName"; $b = new $a();因此,当使用变量实例化类时,似乎忽略了名称空间声明. 有没有更好的方法(比我上...
public static function addColumn($content=[],$fileName='按需求列导出数据实例') {if(empty($content)) {/************************按需求列导出数据实例*************/$content = [['title1', 'title2', 'title3', 'title4', 'title5', 'title6', 'title7', 'title8', 'title9', 'title....'],['值以', '值以', '值以', '值以', '值以', '值以', '值以', '值以', '值以', '值...']];/************************按需求列导出数据...
require_once('Class.php'); $myArray = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // etc哪个是对的?foreach($myArray as $key => $val) {$class = new Class();$result = $class->someMethod($val); }要么$class = new Class(); foreach($myArray as $key => $val) {$result = $class->someMethod($val); }编辑更具体,使用http://simplepie.org/wiki/reference/simplepie/get_items$aFeeds = array(rssFeed1,rssFeed2,rssFe...
我怀疑我的问题的“最佳”答案是使用依赖注入并完全避免这个问题.不幸的是我没有那个选择…… 我需要为一个类编写一个测试,它会导致第三方库被实例化.我想模拟/存储库类,以便它不会进行实时API调用. 我在CakePHP v3.x框架中使用phpunit.我能够模拟库并创建存根响应,但这并不妨碍“真实”类被我的测试之外的代码实例化.我考虑过试图在实例化的上游模拟类,但是有很多类,这会使得测试难以置信地编写/维护. 有没有办法以某种方式“存根...
如果我键入提示所需的类/接口,Laravel 5提供自动依赖解析.但他们应该如何实例化呢?例:public function __construct(Dependency $dependency) {$this->dependency = $dependency; }然后,在另一种方法中,我想创建两个实例,如下所示:$one = new Dependency(1); $two = new Dependency(2);什么是最灵活,最友好的测试方式?解决方法:请原谅我可笑的笑话,但这取决于. 看起来你已经误解了依赖性解决了一点点.在您的示例中,属性“depend...
如果您想从数据库中获取单个对象,PDO非常有用:$obj = $handle->fetchAll(PDO::FETCH_CLASS, $obj_name);如果您希望在一行中返回多个类类型(例如:在进行JOIN时),则PDO不太有用:$handle->fetchAll(PDO::FETCH_ASSOC);…followed by some data mapping on the resulting array.很好 – 除了我想出来的每一种方法看起来都很糟糕. 我的问题是:当数组的内容可能反映所有,没有,某些或多于类所需的内容时,如何以优雅,健壮的方式从同一数...
参见英文答案 > PHP class instantiation. To use or not to use the parentheses? [closed] 2个不能更好地阐明这个问题的道歉.我已经尝试过一些简单的测试,并且无法解决这些问题.无论如何,我想知道以下两个例子之间存在什么差异(如果有的话):<?php class foo {public function __construct(){} }$foo1 = new foo;还有这个:<?php class foo {public function __construct(){} }$foo1 = new f...
我在PHP中创建一个QueryBuilder,数据库事务需要我创建多个查询,这会导致问题,因为第一个查询之后的任何查询都会被附加并堆叠到类中的$query属性. 为了解决这个问题,我可以为每个查询创建新的QueryBuilder对象,如下所示$QB1 = new QB() $QB1->select()->from()->where()...doSomething($QB1);$QB2 = new QB() $QB2->join()->where()...doSomething($QB2);我还可以创建一个方法来重置当前类属性,这将删除第一个查询.$QB = new QB(); ...
我尝试使用DateTime::提取字符串日期的年份. 我不明白为什么DateTime的以下实例化会引发错误:$myDate = "2015-09-10";$year_myDate = new DateTime($myDate)->format("Y");知道这个实际上有效:$myDate = "2015-09-10";$dateTime_myDate = new DateTime($myDate);$year_myDate = $dateTime_myDate->format("Y");对象不会返回自己的实例吗?那么为什么我们不能在实例化之后立即使用这个类的方法呢?解决方法:你可以,你只需要将你的...
让我们假设我们有注册表模式……<?phpclass Registry {private static $objects = array(); private static $instance = null;public static function getInstance() {if (self::$instance == null) {self::$instance = new Registry();}return self::$instance; }protected function _get($key) {return ($this->objects[$key]) ? $this->objects[$key] : null; }protected function _set($key, $val) {$this->objects[$ke...