假设我有一个对象 - 在这种情况下是一个User对象 - 我希望能够跟踪一个单独的类的更改.User对象不应该以任何方式改变它的行为.
因此,我的单独类创建它的"干净"副本,将其存储在本地某个位置,然后稍后可以将User对象与原始版本进行比较,以查看在其生命周期内是否有任何更改.
是否有函数,模式或任何可以快速比较User对象的两个版本的东西?
选项1 也许我可以序列化每个版本,并直接比较,或哈希并比较?
选项2 也许我应该简单地创建一个ReflectionClass,运行该类的每个属性,看看这两个版本是否具有相同的属性值?
选项3
也许有一个简单的原生函数objects_are_equal($object1,$object2);?
最快的方法是什么?
我经常在PHP中使用大型数组或大量动态数据来运行MySQL查询来处理.
有没有更好的方法来运行许多进程,如INSERT或UPDATE而不循环通过INSERT-ed或UPDATE-ed信息?
示例(为了简洁起见,我没有使用准备好的声明):
$myArray = array('apple','orange','grape');
foreach($myArray as $arrayFruit) {
$query = "INSERT INTO `Fruits` (`FruitName`) VALUES ('" . $arrayFruit . "')";
mysql_query($query, $connection);
}
我用GoDaddy托管我的网站,我现在使用PHP mail()函数从我的网站发送表单邮件.GoDaddy每天为表单邮件提供1000个SMTP中继限制,但是他们发誓我的PHP脚本不应该触及它.
由于mail()不接受SMTP信息,它是否只是自动使用GoDaddy(或您可能在的任何托管)?
如果我的网站预计每天发送超过1000封电子邮件(单独的实例,而不是循环),我应该使用不同的方法,还是mail()正确的选择?
我有一个非常大的网站,我正在寻找最有效的方法来管理它(我是唯一的编码器).
我试图设计一个非常简单的MVC结构(我不想使用框架)来帮助我保持所有代码的顺序.
对于一个庞大的网站,最好只有一个控制器来处理所有页面,还是更好,更容易拆分它们?
如果只有一个,那么非框架控制器的一个很好的例子是什么?
假设我有一个Account实体和一个AccountData实体(存储一些较少使用的属性,如性别等).
Account和AccountData之间的关系是一对一的,帐户"拥有"AccountData.
我试图弄清楚,使用Doctrine 2/Symfony 2,如何根据AccountData中的属性提取帐户.
例如,如何使用AccountData-> gender ='female'搜索所有帐户?
什么是保护MySQL注入的最佳方法?我应该注意哪些弱点?
我知道它是什么,但我真的不知道我有多脆弱.虽然我采取了(我认为是)保护自己和我的数据库的步骤.
是否有任何阻止某人的确定方法?
顺便说一句......我用PHP写的:)
与使用include,在文件中执行包含的php相反...是否可以将php文件的内容保存到变量 - 但是php仍然完整且可执行?
我的目标看起来像:
$template = some_imaginary_include_function('myfile.php');
foreach($list_of_blogs as $blog) {
// somehow get blog content in template and render template;
}
Run Code Online (Sandbox Code Playgroud)
我知道那是一个愚蠢的例子......但我希望它能说明一般的想法.如果我必须在页面上循环模板50次(比如它是一个博客列表),实际运行并包含每个模板似乎都很愚蠢.
我错了吗?有没有办法做到这一点?
我正在编写一个查询来返回在一段时间内每天写的博客帖子的数量.当某天没有博客记录时,我的问题就出现了.根据我的查询,完全跳过该日的结果.
这是我的查询:
SELECT DATE(`posted`), COUNT(`id`)
FROM `blogs` WHERE `status` = 'active'
&& `posted` BETWEEN `2011-01-01` AND `2011-05-01`
GROUP BY DATE(`posted`)
Run Code Online (Sandbox Code Playgroud)
它返回类似于:
count | date
_________________
2 | 2011-01-01
5 | 2011-01-02
1 | 2011-01-04
Run Code Online (Sandbox Code Playgroud)
请注意,它缺少2011-01-03,因为它没有任何帖子.
如何让它显示0个帖子的那些日子?
我试图尽可能多地使用依赖注入,但是当涉及短期依赖项等问题时我遇到了麻烦.
例如,假设我有一个博客管理器对象,希望生成它在数据库中找到的博客列表.这样做的选项(据我所知)是:
但是,#1很糟糕,因为它会产生强耦合.#2仍然看起来很糟糕,因为这意味着必须事先注入对象工厂 - 暴露它可以创建的所有其他对象.
3号似乎没问题,但如果我使用#3,我是否将"new"关键字放在blogEntryFactory本身中,或者,我是否将加载器注入blogEntryFactory并使用加载器?
如果我有许多不同的工厂,比如blogEntryFactory(例如我可以拥有userFactory和commentFactory),那么在所有这些不同的工厂中放置"new"关键字就会产生依赖性问题.
我希望这是有道理的...
注意
我已经得到了一些关于这个特定博客示例如何不必要的答案,但事实上,你应该使用抽象工厂模式的情况,这就是我得到的观点.你是在这种情况下使用"新"还是做其他事情?
假设对于每个域实体,我都有一个为数据映射器提供API的存储库.例如,如果我有一个UserEntity,那么我会有一个UserRepository与UserMapper说话,以便在数据库中保存用户数据.
现在,假设一个表单在网页上提交,我的控制器知道它需要根据提交的信息创建一个新的UserEntity.
可以:
在那里做新的UserEntity(),并根据提交的表单数据运行所有必要的setter方法,然后将UserEntity传递给repo,后者将传递给mapper进行插入?
控制器创建UserEntity => Repo => Mapper => DB
将表单数据转换为数组,并将其传递给UserRepository,然后UserRepository运行新的UserEntity()和setter,并将其传递给mapper进行插入?
控制器传递用户数据=> Repo创建UserEntity => Mapper => DB
将数组传递给UserRepository,UserRepository将数组传递给映射器以获取新的UserEntity和插入?
控制器传递用户数据=> Repo传递用户数据=> Mapper创建UserEntity => DB
谁负责管理对象的创建?
php ×9
mysql ×3
database ×1
doctrine-orm ×1
email ×1
group-by ×1
include ×1
no-framework ×1
object ×1
symfony ×1