快速前进: 我写这个的目的是为了更好地理解dependency injection和IoC容器,也是为了以后我可以纠正它的错误,并用它来帮助我的几个朋友教他们。 到目前为止,我已经尝试阅读各种框架(laravel,fuel,codeigniter,symfony)的文档,我发现框架有太多不同的方面,我需要使用它,我决定尝试在尝试在框架中使用它们之前,先自己学习每个主要部分。 我花了几个小时search各种各样的意思,看着stackoverflow响应,并阅读各种文章试图了解什么是IoC,以及如何使用它来正确pipe理依赖关系,我相信我明白它在概念上是什么,但我仍然灰色关于如何正确实施。 我认为读这本书帮助我的最好方法是给出我目前对IoC容器和dependency injection的理解,然后让那些比我更好理解的人指出我的理解力不足。 我的理解: 依赖关系是当ClassA的实例需要ClassB的实例来实例化ClassA的新实例时。 dependency injection是当ClassA通过ClassB的构造函数中的参数或通过set〜DependencyNameHere〜(〜DependencyNameHere〜$ param)函数传递ClassB的实例时。 (这是我不完全确定的领域之一) 。 一个IoC容器是一个单例类(在任何给定的时间只能有一个实例实例化),在这里可以注册实例化这个类的对象的具体方法。 下面是我想要描述的一个例子的链接,以及我一直使用的IoC容器的类定义 所以在这一点上,我开始尝试使用IoC容器更复杂的情况。 到目前为止,似乎为了使用IoC容器,我仅限于几乎所有我想创build的具有IoC容器中定义的依赖关系的类的关系。 如果我想创build一个inheritance一个类的类,但是只有在以IoC容器中注册的特定方式创build父类的情况下。 例如:我想创build一个mysqli的子类,但是我想在IoC容器中注册这个类,只用我之前在IoC容器中注册的方式实例化父类。 我想不出没有重复代码的方法(因为这是一个学习项目,我试图尽量保持它的“纯”)。 以下是我想描述的更多的例子。 所以这里是我的一些问题: 我想尽量做到不违反OOP原则? 我知道在c + +我可以使用dynamic内存和复制构造函数来完成它,但我一直无法在PHP中find这种function。 (我会承认,除了__construct之外,使用其他任何魔术方法的经验都很less,但是如果我理解正确的话,可以从阅读和__clone中获得,我不能在构造函数中使用它来实例化子类,父类的实例)。 我的所有依赖类定义应该在哪里与IoC相关? (我的IoC.php应该在顶部有一堆require_once('dependencyClassDefinition.php')吗?我的直觉反应是有更好的方法,但我还没有拿出一个) 我应该在什么文件注册我的对象? 目前在类定义之后,在IoC.php文件中完成对IoC :: register()的所有调用。 在我注册一个需要依赖关系的类之前,是否需要在IoC中注册依赖关系? 由于我没有调用匿名函数,直到我真正实例化了一个在IoC中注册的对象,我猜不到,但它仍然是一个问题。 还有什么我可以忽略,我应该做的或使用? 我试图一次一个脚印,但我也不想知道我的代码是可重用的,最重要的是,对我的项目一无所知的人可以阅读并理解它。 我知道这是非常长的,只是想提前感谢任何花时间阅读的人,甚至更愿意分享他们的知识。
我有一堆date格式为“04/17/2009”string的logging, 我想将它们转换为一个MySQLdate时间字段 我打算使用foreach循环来读取旧的date值,并将新格式化的值插入到每个logging中的新字段 什么是最好的方式来转换该string…我以为PHP可能有办法自动做到这一点? 谢谢
我需要得到前一个月和一年,相对于当前的date。 但是,请参阅以下示例。 // Today is 2011-03-30 echo date('Ym-d', strtotime('last month')); // Output: 2011-03-02 由于二月和三月的天数不同,这种行为是可以理解的(到某一点),上面的例子中的代码是我所需要的,但是在每个月的第一天和第二十八天之间只能正确运行。 那么,如何尽可能以最优雅的方式得到上个月和每年(想到date("Ym") ),这一年的每一天都有效? 最佳解决scheme将基于时间参数parsing。 更新。 稍微澄清要求。 我有一段代码可以获得最近几个月的统计数据,但是我首先显示上个月的统计数据,然后在需要时加载其他月份。 这是预期的目的。 所以,在这个月的时间里,我想知道为了加载上个月的统计数据,我应该select哪一个月份。 我也有一个时区感知的代码(现在不是很重要),并接受strtotime兼容的string作为input(初始化内部date),然后允许调整date/时间,也使用strtotime兼容的string。 我知道这可以用很less的条件和基本的math来完成,但是比起来,这真的很麻烦(当然,如果它工作正常的话): echo tz::date('last month')->format('Y-d') 所以,我只需要前一个月和一年,以时间兼容的方式。 回答(谢谢,@dnagirl): // Today is 2011-03-30 echo date('Ym-d', strtotime('first day of last month')); // Output: 2011-02-01
Twig中是否有一个较短的语法来输出一个条件string? <h1>{% if not info.id %}create{% else %}edit{% endif %}</h1> 传统的PHP比这更容易: <h1><?php info['id']? 'create' : 'edit' ?></h1>
我想用phpunit开始我的symfony 2应用程序的unit testing。 我使用composer php安装phpunit(每个项目的依赖)。 http://www.phpunit.de/manual/current/en/installation.html 我现在如何在Zend Server上运行phpunit命令? 我没有安装梨。
在像C或Python这样的语言中,如果我用一个整数除整数,我得到一个整数: >>> 8/3 2 但在PHP中,如果我用另一个整数除整数,有时会得到一个float: php > var_dump(6/3); int(2) php > var_dump(8/3); float(2.6666666666667) 我想像Python或C那样做分工,所以8/3是2.我怎样才能在PHP中做到这一点?
例子print_r($myarray) Array ( [0] => Array ( [id] => 6578765 [name] => John Smith [first_name] => John [last_name] => Smith [link] => http://www.domain.com [gender] => male [email] => email@domain.com [timezone] => 8 [updated_time] => 2010-12-07T21:02:21+0000 ) ) 题 : 如何获得$myarray单个值。 喜欢 echo $myarray['email']; will show email@domain.com
我已经阅读了Composer的全局安装文档 ,但只适用于* nix系统: curl -s https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer 在Windows上做同样的事情我也会很高兴,那就是我的开发机器的操作系统。 我将能够运行 composer update 从composer.json存在的任意文件夹。 解释器php.exe已经在PATHvariables中。 任何线索?
我想从使用php的图片中提取GPS EXIF标签。 我使用exif_read_data()返回所有标签+数据的数组: GPS.GPSLatitudeRef: N GPS.GPSLatitude:Array ( [0] => 46/1 [1] => 5403/100 [2] => 0/1 ) GPS.GPSLongitudeRef: E GPS.GPSLongitude:Array ( [0] => 7/1 [1] => 880/100 [2] => 0/1 ) GPS.GPSAltitudeRef: GPS.GPSAltitude: 634/1 我不知道如何解释46/1 5403/100和0/1? 46可能是46°,但其余的尤其是0/1呢? angle/1 5403/100 0/1 这个结构是什么? 如何将它们转换成“标准”(如来自wikipedia的46°56'48“N 7°26'39”E)? 我想通过坐标到谷歌地图API来显示在地图上的图片位置!
有一个函数可以返回程序正在执行的当前函数的名称吗?