小编dyn*_*mic的帖子

为什么人们在他们的PHP框架中使用单例

好吧,我正在努力理解为什么需要单身人士.

让我们举一个真实的例子:我有一个我的CMS的框架
我需要有一个记录一些信息的类(让我们坚持使用PHP).

例:

class Logger{
   private $logs = array();

   public function add($log) {
      $this->logs[]=$log;
   }      
}
Run Code Online (Sandbox Code Playgroud)

当然,这个辅助对象对于CMS的页面请求的输入生命周期必须是唯一的.
为了解决这个问题,我们将它变成一个单例(声明私有构造函数等)

但为什么像这样的阶级并不是完全静止的呢?这将解决单例模式的需要(这被认为是不好的实践)示例:

class Logger {
    private static $logs = array();

    public static function add($log) {
        self::$logs[]=$log;
    }
}
Run Code Online (Sandbox Code Playgroud)

通过使这个帮助器完全静态,当我们需要在我们的应用程序中的某处添加一个日志时,我们只需要静态地调用它:Logger::add('log 1');vs一个单独的调用,如:Logger::getInstance()->add('log 1');

希望有人能让我轻松理解为什么在PHP中使用单例而不是静态类.

编辑

感谢@James,这是一个非常好的关于单身人士与静态课程的讲座.(注意它没有解决我的问题)

php oop frameworks dependency-injection

11
推荐指数
2
解决办法
5057
查看次数

静态方法:考虑到PHP 5.3后期静态绑定,它们仍然不好吗?

如果你搜索静态方法不好的原因,你发现它的第一件事是因为你在单元测试时不能覆盖它.

因此,考虑到PHP 5.3,你可以通过引入做任何你想做的事情static::吗?

加:

http://sebastian-bergmann.de/archives/883-Stubbing-and-Mocking-Static-Methods.html

注意他甚至解释了如何使用单例而没有任何测试问题:

php oop singleton design-patterns dependency-injection

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

set_error_handler()不适用于FATAL错误

我有一个简单的自定义错误处理程序,它在错误日志文件中写入一些有用的调试信息.

它适用于所有内容,但它不会因为FATAL错误而被触发.

有办法解决这个问题吗?

目前为了绕过这种情况,我已经注册了一个关闭功能,检查 error_get_last()

php error-handling fatal-error

11
推荐指数
2
解决办法
7113
查看次数

从不同的物体角度找到一个好的单应性?

我正在使用特征提取(筛选,orb)进行对象检测.

我想从对象的不同视角(训练图像)中提取ORB特征,然后将它们与查询图像进行匹配.

我面临的问题是:如何从不同角度的关键点创建一个良好的单应性,这些关键点当然具有不同大小的图像?

编辑

我正在考虑为每个火车图像创建一个单应性,然后说3-4个匹配,然后计算一些"均值"单应...

例如,当您从每个火车图像中说出1-2个匹配时,会出现问题,此时您无法创建甚至1个单应性

创造单应性的代码

  //> For each train images with at least some good matches ??
  H = findHomography( train, scene, CV_RANSAC );
  perspectiveTransform( trainCorners, sceneCorners, H);
Run Code Online (Sandbox Code Playgroud)

c++ opencv computer-vision feature-detection orb

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

划分两个整数并舍入结果,而不使用浮点

我需要将两个数字分开并将其四舍五入.有没有更好的方法来做到这一点?

int myValue = (int) ceil( (float)myIntNumber / myOtherInt );
Run Code Online (Sandbox Code Playgroud)

我发现不得不投两个不同的时间.(extern int cast只是为了关闭警告)

注意我必须内部转换才能浮动

int a = ceil(256/11); //> Should be 24, but it is 23
              ^example
Run Code Online (Sandbox Code Playgroud)

c++

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

Java应用程序是否会在新的Mac App Store上被接受?

我听说Apple将只接受Mac App Store中的Objective C应用程序.

有人知道java app是否会被接受?

java app-store

10
推荐指数
1
解决办法
3303
查看次数

$ _SERVER ['HTTP_HOST']也包含端口号= /

我不知道也许这是一个错误.

我的服务器上有2个虚拟主机.

virtualhost1.com virtualhost2.com

如果我用端口80打开virtualhost1.com(virtualhost1.com:80)

$_SERVER['HTTP_HOST']='virtualhost1.com';
Run Code Online (Sandbox Code Playgroud)

但如果我打开virtualhost2.com:80

$_SERVER['HTTP_HOST']='virtualhost2.com:80'; // NOTE: with port number
Run Code Online (Sandbox Code Playgroud)

我能知道为什么吗?

php virtual-hosts port-number superglobals

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

返回文本之间关联的函数?

考虑我有一个

string1 = "hello hi goodmorning evening [...]"
Run Code Online (Sandbox Code Playgroud)

我有一些小关键字

compare1 = "hello evening"
compare2 = "hello hi"
Run Code Online (Sandbox Code Playgroud)

我需要一个函数来返回文本和关键字之间的关联.例:

function(string1,compare1);  // returns: 4
function(string1,compare2);  // returns: 5 (more relevant)
Run Code Online (Sandbox Code Playgroud)

请注意,5和4仅作为示例.

你可以说 - 编写一个计算出现次数的函数 - 但是对于这个例子,这不起作用,因为它们都有2次出现,但是compare1的相关性较低,因为"你好晚上"并不是在string1中找到的(2个字你好和晚上是你好比你好更多)

有没有任何已知的算法来做到这一点?

ADD1:

在这种情况下,像编辑距离这样的算法是行不通的.因为string1是一个完整的文本(如300-400个单词),并且比较字符串最多为4-5个单词.

algorithm text full-text-search relevance

10
推荐指数
1
解决办法
2503
查看次数

Facebook评论审核工具

我刚刚添加了facebook评论插件,我看到了用户的第一条评论.

但如果我去http://developers.facebook.com/tools/comments,最近没有评论.

任何线索?

comments facebook-comments

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

我需要设置ini_set('default_charset','UTF-8');?

我的每个页面框架如下:

ini_set('mbstring.internal_encoding','UTF-8');
ini_set('mbstring.func_overload',7);
header('Content-Type: text/html; charset=UTF-8');
Run Code Online (Sandbox Code Playgroud)

我也需要做ini_set( 'default_charset', 'UTF-8' );吗?

php unicode

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