小编the*_*art的帖子

使用静态工厂模式时,包含PHP库的最佳方法是什么?

我的PHP库中有几个静态工厂模式.但是,内存占用空间不大,我们希望减少执行期间所需的文件数量.以下是我们今天的例子:

require_once('Car.php');
require_once('Truck.php');

abstract class Auto
{
    // ... some stuff ...

    public static function Create($type)
    {
        switch ($type) {
            case 'Truck':
                return new Truck();
                break;
            case 'Car':
            default:
                return new Car();
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是不可取的,因为即使只需要一个或另一个,也需要包含Car.php和Truck.php.据我所知,require/include和他们的......一旦变化包括与调用相同范围的库.这是真的?

如果是这样,我相信这会导致内存泄漏:

    abstract class Auto
    {
        // ... some stuff ...

        public static function Create($type)
        {
            switch ($type) {
                case 'Truck':
                    require_once('Truck.php');
                    return new Truck();
                    break;
                case 'Car':
                default:
                    require_once('Car.php');
                    return new Car();
                    break;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,在第二个例子中,即使使用了require_once风格,多次调用Create()也会因为调用范围而导致多个需求.

这是真的?在这样的示例中,在php中动态包含库的最佳方法是什么?

谢谢!

php polymorphism require include require-once

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

如何防止Php的DOMDocument编码html实体?

我有一个函数,使用Php的DOMDocument替换字符串中的锚点'href属性.这是一个片段:

$doc        = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($text);
$anchors    = $doc->getElementsByTagName('a');

foreach($anchors as $a) {
    $a->setAttribute('href', 'http://google.com');
}

return $doc->saveHTML();
Run Code Online (Sandbox Code Playgroud)

问题是loadHTML($ text)围绕doctype,html,body等标签中的$ text.我尝试通过这样做而不是loadHTML()来解决这个问题:

$doc        = new DOMDocument('1.0', 'UTF-8');
$node       = $doc->createTextNode($text);
$doc->appendChild($node);
...
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会编码所有实体(包括锚点).有谁知道如何关闭它?我已经彻底查看了文档,并试图破解它,但无法弄明白.

谢谢!:)

php anchor href domdocument createtextnode

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

如何将自定义jQuery事件冒泡到window.document?

我写了一个绝对定位的下拉菜单.此菜单打开时,我将触发自定义事件:

ps.DropDown.prototype._onOpenComplete = function() {
    $(this).trigger('MENU_OPEN', [this]);
}
Run Code Online (Sandbox Code Playgroud)

当我知道要将ps.DropDown的哪个实例作为目标时,这很有效:

var dd = new ps.DropDown();
$(dd).on('MENU_OPEN', fn);
Run Code Online (Sandbox Code Playgroud)

但是,如果事件没有停止传播,我希望我的自定义事件冒泡到window.document.例如:

var dd = new ps.DropDown();
$(dd).on('MENU_OPEN', function(event, instance) {
    // this would stop bubbling to $(window.document)
    // event.stopPropagation();
});
$(window.document).on('MENU_OPEN', function(event, instance) {
    // bubbled!
});
Run Code Online (Sandbox Code Playgroud)

有没有办法用jQuery实现这个目标?

编辑以类比的方式添加示例

单击按钮元素将触发事件.此事件将继续冒出父元素链,直到它到达window.document(除非传播被事件侦听器停止).我有兴趣为自定义事件合成这种行为,如果没有调用event.stopPropagation(),它将冒泡到window.document(或$ .event,或其他一些全局窗口,没关系)

javascript jquery events

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

如何在Mongo Shell CLI中要求脚本

我希望能够导入一个常用工具库,以便我更轻松地使用MongoDB.但是,我还没有发现将外部脚本轻松导入Mongo CLI.理想情况下,这将类似于Node.js要求.

如何在默认情况下要求在Mongo CLI中工作?

或者,是否有其他方法来解决外部库依赖?

mongodb

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

处理Rails.cache.fetch中的错误

我正在使用Rails.cache来缓存来自API的响应:

Rails.cache.fetch("key") do 
  api.get "/api/data"
  api.body
end
Run Code Online (Sandbox Code Playgroud)

API不是很可靠,偶尔我会收到500错误.我想避免缓存500响应.

Rails.cache.fetch("key") do 
  api.get "/api/data"
  if api.body.meta.status == 500
    # Bail out, Goose!
  end
  api.body
end
Run Code Online (Sandbox Code Playgroud)

我宁愿不提出异常.没有缓存的"拯救"块的最佳方法是什么?

caching ruby-on-rails ruby-on-rails-4

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

如何在Node.js中设置最大http客户端连接

我需要增加我正在编写的模块可用的出站http套接字的数量.我知道可以使用以下方式全局执行此操作:

// increase max sockets
http.globalAgent.maxSockets = 1000;
Run Code Online (Sandbox Code Playgroud)

在不影响其他模块的情况下,创建模块的maxSocket限制的最佳模式是什么?

http node.js

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

如何从命令行将脚本导入NodeJ?

从命令行,我想从我的粘贴板(FYI:pbpaste是一个OSX功能)中获取一个脚本并将其传递到Node的repl命令行工具中.例如:

pbpaste | node -e

这不会评估剪贴板中的内容.如何让运行时执行此操作?

shell command-line node.js

6
推荐指数
1
解决办法
3721
查看次数

为什么 Node.js 无法从新贵脚本中捕获 SIGTERM?

当我停止一个新贵作业时,默认情况下它使用 SIGTERM。我在 node.js 中捕获了 SIGTERM,如下所示:

process.on('SIGTERM', shutdownServerGracefully);
process.on('SIGINT', shutdownServerGracefully);
Run Code Online (Sandbox Code Playgroud)

我通过从终端运行它并发送 来验证这是否有效kill -s SIGTERM [pid]。这会触发正常关闭,我在日志中看到它。

我有一个新贵脚本,如下所示:

# Process will start after a network is available.
start on runlevel [2345]
stop on runlevel [016]

# Keep server running
respawn
respawn limit 5 30

# Wait 5 minutes for server to gracefully shutdown
kill timeout 300
# Allow for graceful shutdown
kill signal SIGTERM
normal exit 0 SIGTERM SIGINT SIGQUIT
chdir /var/web_server

script
  # Environment variables
  . /etc/environment
  export NODE_ENV

  # …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu upstart

5
推荐指数
0
解决办法
362
查看次数

有没有办法使用HashWithIndifferentAccess序列化ActiveRecord的JSON属性?

ActiveRecord::ConnectionAdapters::PostgreSQLAdapter在Rails应用程序中使用.假设我有一个架构:

  create_table "foo", id: :bigserial, force: :cascade do |t|
    t.string   "name"
    t.jsonb    "data",              null: false
  end
Run Code Online (Sandbox Code Playgroud)

现在假设我运行以下代码:

class Foo < ActiveRecord::Base
  self.table_name = :foo
end

my_foo = Foo.create!(:name => 'foobar', :data => {:a => 'hello'})
my_foo = Foo.where(:name => 'foobar').first!
puts my_foo.data[:a]
puts my_foo.data['a']
Run Code Online (Sandbox Code Playgroud)

输出将是:

# nil
# 'hello'
Run Code Online (Sandbox Code Playgroud)

是否可以让ActiveRecord使用HashWithIndifferentAccess自动反序列化jsonb类型?

ruby activerecord json ruby-on-rails

4
推荐指数
2
解决办法
1988
查看次数

有没有办法从FBJS中的画布访问iframe的窗口对象?(Facebook)的

从facebook画布,我需要能够访问iframe窗口.通常您可以使用window.frames执行此操作,但FJBS似乎不允许访问窗口对象.

有没有人想出如何访问窗口对象?

javascript facebook fbml

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

在Ruby中用HashWithIndifferentAccess完全替换Hash是不是很糟糕?

我发现自己经常遇到错误,我用符号代替字符串访问哈希,反之亦然.我想要做:

require 'active_support/hash_with_indifferent_access'
Hash = HashWithIndifferentAccess
# (irb):xx: warning: already initialized constant Hash
Run Code Online (Sandbox Code Playgroud)

这个警告是因为已经定义了哈希,但我并不在乎.

当然,性能可能稍差.

当然,也许有些宝石会创建一个包含字符串和符号的哈希并且会破坏 - 但这有多常见?

这不好吗?反模式?我会后悔这样做吗?有什么缺点?有这样的好/坏经历吗?

ruby hash ruby-on-rails activesupport

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

三元运算符是否会出现错误/缺陷注入?

我的办公室已经讨论过使用三元运算符.这次讨论有两个方面.

方面1)三元运算符易于编写和读取,因此便利性是节省的净成本.

方2)三元运算符难以维护,因为它们需要过多的代码流失,如果它们需要被修改为甚至稍微复杂一点.

额外的书呆子点,如果你能引用顶级机构在这个问题上所做的任何实际研究......我很有兴趣看到这方面的硬数据.


我的理论是,最好的代码是可以轻松改变和适应的代码,并且变化所需的复杂性越小,中断的可能性就越小.例:

$id = $user->isRegistered() ? $user->id : null;
Run Code Online (Sandbox Code Playgroud)

好的,所以这是完全有效的,但是当代码需要改变成稍微复杂的东西时会发生什么?

$id = null;
if ($user->isRegistered() || $user->hasEmail()) {
    $id = $user->id;
}
Run Code Online (Sandbox Code Playgroud)

任何理智的程序员都会查看三元组并转换为标准if/else.但是,这需要进行4行更改,而不是从以下开始:

if ($user->isRegistered()) {
    $id = $user->id;
}
Run Code Online (Sandbox Code Playgroud)

这只需要1行更改.

formatting design-patterns ternary-operator

0
推荐指数
1
解决办法
258
查看次数