小编joh*_*ack的帖子

在PHP中比较两个对象的最快方法是什么?

假设我有一个对象 - 在这种情况下是一个User对象 - 我希望能够跟踪一个单独的类的更改.User对象不应该以任何方式改变它的行为.

因此,我的单独类创建它的"干净"副本,将其存储在本地某个位置,然后稍后可以将User对象与原始版本进行比较,以查看在其生命周期内是否有任何更改.

是否有函数,模式或任何可以快速比较User对象的两个版本的东西?

选项1 也许我可以序列化每个版本,并直接比较,或哈希并比较?

选项2 也许我应该简单地创建一个ReflectionClass,运行该类的每个属性,看看这两个版本是否具有相同的属性值?

选项3 也许有一个简单的原生函数objects_are_equal($object1,$object2);

最快的方法是什么?

php object

11
推荐指数
1
解决办法
3万
查看次数

将MySQL查询放在PHP循环中是不是很糟糕?

我经常在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);
}

php mysql

10
推荐指数
2
解决办法
5595
查看次数

默认情况下PHP mail()使用什么SMTP服务器,有更好的选择吗?

我用GoDaddy托管我的网站,我现在使用PHP mail()函数从我的网站发送表单邮件.GoDaddy每天为表单邮件提供1000个SMTP中继限制,但是他们发誓我的PHP脚本不应该触及它.

  1. 由于mail()不接受SMTP信息,它是否只是自动使用GoDaddy(或您可能在的任何托管)?

  2. 如果我的网站预计每天发送超过1000封电子邮件(单独的实例,而不是循环),我应该使用不同的方法,还是mail()正确的选择?

php email

10
推荐指数
3
解决办法
3万
查看次数

MVC大型网站,使用一个控制器...或许多?

我有一个非常大的网站,我正在寻找最有效的方法来管理它(我是唯一的编码器).

我试图设计一个非常简单的MVC结构(我不想使用框架)来帮助我保持所有代码的顺序.

对于一个庞大的网站,最好只有一个控制器来处理所有页面,还是更好,更容易拆分它们?

如果只有一个,那么非框架控制器的一个很好的例子是什么?

php model-view-controller no-framework

9
推荐指数
1
解决办法
4042
查看次数

学说2:如何通过关联的价值来搜索实体?

假设我有一个Account实体和一个AccountData实体(存储一些较少使用的属性,如性别等).

Account和AccountData之间的关系是一对一的,帐户"拥有"AccountData.

我试图弄清楚,使用Doctrine 2/Symfony 2,如何根据AccountData中的属性提取帐户.

例如,如何使用AccountData-> gender ='female'搜索所有帐户?

php symfony doctrine-orm

9
推荐指数
1
解决办法
1万
查看次数

使用PHP的MySQL注入保护和漏洞标志

什么是保护MySQL注入的最佳方法?我应该注意哪些弱点?

我知道它是什么,但我真的不知道我有多脆弱.虽然我采取了(我认为是)保护自己和我的数据库的步骤.

是否有任何阻止某人的确定方法?

顺便说一句......我用PHP写的:)

php mysql database sql-injection

8
推荐指数
2
解决办法
1万
查看次数

PHP的file_get_contents与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次(比如它是一个博客列表),实际运行并包含每个模板似乎都很愚蠢.

我错了吗?有没有办法做到这一点?

php include

8
推荐指数
1
解决办法
8271
查看次数

MySQL GROUP BY日期 - 如何在没有行时返回结果

我正在编写一个查询来返回在一段时间内每天写的博客帖子的数量.当某天没有博客记录时,我的问题就出现了.根据我的查询,完全跳过该日的结果.

这是我的查询:

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个帖子的那些日子?

mysql group-by

8
推荐指数
1
解决办法
1121
查看次数

抽象工厂使用"新"吗?

我试图尽可能多地使用依赖注入,但是当涉及短期依赖项等问题时我遇到了麻烦.

例如,假设我有一个博客管理器对象,希望生成它在数据库中找到的博客列表.这样做的选项(据我所知)是:

  1. 新博客();
  2. $这个 - >装载机>博客();
    • loader对象创建各种其他类型的对象,如数据库对象,文本过滤器等.
  3. $这个 - > blogEntryFactory->创建();

但是,#1很糟糕,因为它会产生强耦合.#2仍然看起来很糟糕,因为这意味着必须事先注入对象工厂 - 暴露它可以创建的所有其他对象.

3号似乎没问题,但如果我使用#3,我是否将"new"关键字放在blogEntryFactory本身中,或者,我是否将加载器注入blogEntryFactory并使用加载器?

如果我有许多不同的工厂,比如blogEntryFactory(例如我可以拥有userFactory和commentFactory),那么在所有这些不同的工厂中放置"new"关键字就会产生依赖性问题.

我希望这是有道理的...

注意

我已经得到了一些关于这个特定博客示例如何不必要的答案,但事实上,你应该使用抽象工厂模式的情况,这就是我得到的观点.你是在这种情况下使用"新"还是做其他事情?

php design-patterns dependency-injection abstract-factory

8
推荐指数
1
解决办法
288
查看次数

在哪里建立新的域名实体?控制器,存储库或映射器?

假设对于每个域实体,我都有一个为数据映射器提供API的存储库.例如,如果我有一个UserEntity,那么我会有一个UserRepository与UserMapper说话,以便在数据库中保存用户数据.

现在,假设一个表单在网页上提交,我的控制器知道它需要根据提交的信息创建一个新的UserEntity.

可以:

  1. 在那里做新的UserEntity(),并根据提交的表单数据运行所有必要的setter方法,然后将UserEntity传递给repo,后者将传递给mapper进行插入?

    控制器创建UserEntity => Repo => Mapper => DB

  2. 将表单数据转换为数组,并将其传递给UserRepository,然后UserRepository运行新的UserEntity()和setter,并将其传递给mapper进行插入?

    控制器传递用户数据=> Repo创建UserEntity => Mapper => DB

  3. 将数组传递给UserRepository,UserRepository将数组传递给映射器以获取新的UserEntity和插入?

    控制器传递用户数据=> Repo传递用户数据=> Mapper创建UserEntity => DB

谁负责管理对象的创建?

php instantiation separation-of-concerns

7
推荐指数
1
解决办法
533
查看次数