小编igo*_*s07的帖子

在PHP中是否有用于数据库访问的单例的用例?

我通过PDO访问我的MySQL数据库.我正在设置对数据库的访问权限,我的第一次尝试是使用以下内容:

我想到的第一件事是global:

$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd');

function some_function() {
    global $db;
    $db->query('...');
}
Run Code Online (Sandbox Code Playgroud)

这被认为是一种不好的做法.一点点搜索后,我结束了与Singleton模式,其

"适用于需要单个类实例的情况."

根据手册中的示例,我们应该这样做:

class Database {
    private static $instance, $db;

    private function __construct(){}

    static function singleton() {
        if(!isset(self::$instance))
            self::$instance = new __CLASS__;

        return self:$instance;
    }

    function get() {
        if(!isset(self::$db))
            self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd')

        return self::$db;
    }
}

function some_function() {
    $db = Database::singleton();
    $db->get()->query('...');
}

some_function();
Run Code Online (Sandbox Code Playgroud)

当我能做到这一点时,为什么我需要相对较大的课程呢?

class Database {
    private static $db;

    private function __construct(){}

    static function get() …
Run Code Online (Sandbox Code Playgroud)

php oop singleton design-patterns

136
推荐指数
7
解决办法
4万
查看次数

"Mysql行大小太大"的更改限制

我该如何更改限制

行大小太大(> 8126).将某些列更改为TEXT或BLOB或使用ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED可能会有所帮助.在当前行格式中,BLOB内联存储768字节的前缀.

表:

id  int(11) No       
name    text    No       
date    date    No       
time    time    No       
schedule    int(11) No       
category    int(11) No       
top_a   varchar(255)    No       
top_b   varchar(255)    No       
top_c   varchar(255)    No       
top_d   varchar(255)    No       
top_e   varchar(255)    No       
top_f   varchar(255)    No       
top_g   varchar(255)    No       
top_h   varchar(255)    No       
top_i   varchar(255)    No       
top_j   varchar(255)    No       
top_title_a varchar(255)    No       
top_title_b varchar(255)    No       
top_title_c varchar(255)    No       
top_title_d varchar(255)    No       
top_title_e varchar(255)    No       
top_title_f varchar(255)    No       
top_title_g varchar(255)    No …
Run Code Online (Sandbox Code Playgroud)

mysql

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

有没有办法显示或抛出PHP警告?

我在数据库类中有一个select()方法,它有一个可选的布尔参数$ sum.该参数用于表示该方法是否应该使用COUNT(*).

我想显示一个警告,就像那些正常的PHP错误,如果我尝试访问class-> sum,如果没有设置属性(即当我用$ sum = false调用select()时).

有没有办法显示这样的警告,或者我应该回应错误并开心?

php warnings

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

PHP7中的标量和严格类型是性能增强功能吗?

从PHP7开始,我们现在可以使用标量typehint并在每个文件的基础上请求严格类型.使用这些功能是否有任何性能优势?如果有,怎么样?

在互联网周围,我只发现了概念上的好处,例如:

  • 更精确的错误
  • 避免不必要的类型强制问题
  • 更多的语义代码,避免在使用其他代码时产生误解
  • 更好的IDE评估代码

php performance types strong-typing php-7

34
推荐指数
2
解决办法
6876
查看次数

如何自动调整tinyMCE的大小?

我有一个设置在TextArea上的TinyMCE,我希望这个编辑器区域始终占据其父div的所有空间.

我有一个JS函数,它获取当前空间并将textarea.style.height设置为它,但是当我启用TinyMCE时,它似乎停止工作.

此外,textarea宽度:100%; 当它也使用TinyMCE时,它不会通过HTML呈现来调整大小.

有任何想法吗?

html javascript resize tinymce autoresize

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

PHP POST请求中缺少授权标头

我目前正在尝试读取我正在使用POST请求调用的PHP脚本中的授权标头.Authorization标头填充了令牌.似乎Authorization标头在它到达我的PHP脚本之前以某种方式被删除.我正在使用Postman(Chrome插件)执行发布请求,并在我的PHP脚本中启用了CORS.我没有直接访问apache服务器.

HTTP请求:

Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
Authorization:Bearer mytoken
Cache-Control:no-cache
Connection:keep-alive
Content-Length:32
Content-Type:text/plain;charset=UTF-8
Host:www.myhost.com
Origin:chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)       
 Chrome/38.0.2125.104 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

PHP脚本:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type,      Accept");
header("Content-Type: application/json");

$headers = getallheaders();
echo $headers['Authorization'];
Run Code Online (Sandbox Code Playgroud)

上面的脚本输出''(=无).

php apache authorization header http

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

Sane方式在Handlebars.js帮助器参数中连接字符串和变量?

我正在尝试在Ember中构建一个简单的模态组件,但似乎Handlebars的"逻辑较少"对我来说太不合逻辑了.是否有任何理智的方式来实现这个结果?

<h2>Nice block about {{title}}</h2>
<a href="#" data-toggle="modal" id="add-item-{{title}}"> {{!this works}}

{{#my-modal modal-id="add-item-{{title}}" header='New {{title}}'}} {{! those don't}}
  <p>My body blabla</p>
{{/my-modal}}
Run Code Online (Sandbox Code Playgroud)

目前我最终得到了我的模态id "add-item-{{title}}",字面意思,以及模态标题.

并且......不,现在我不打算将"标题"作为新的参数传递并在模态中使用它.另一个模板中的模态标题可能不是"新{{title}}",但"你确定吗?" 或"细节{{title}}".

custom-component handlebars.js ember.js

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

PHP类型提示特征

我有一个特点.为了创造力,让我们称之为特质Trait:

trait Trait{    
    static function treat($instance){    
        // treat that trait instance with care
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我还有一个使用这个特性的类,User.当尝试使用User实例调用treat时,一切正常.但我想输入提示,只有使用Trait的类的实例应该作为参数给出,如下所示:

static function treat(Trait $instance){...}
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,这会导致致命的错误,该错误表明该函数期待Trait的一个实例,但是给出了一个User实例.这种类型的提示适用于继承和实现,但我如何键入提示特征?

php traits type-hinting

25
推荐指数
2
解决办法
8321
查看次数

Git克隆"致命:我不处理协议'ssh'"

我在本地计算机上创建了一个存储库,并要求同事克隆它,但它说它无法处理SSH协议.在我的计算机中,存储库位于/devel/scripts.git,并且有一个用户devel可以访问该文件夹.另一个人可以正常克隆它,使用git clone ssh://devel@192.168.0.7/devel/scripts.git.

我们都在使用Ubuntu,我和有问题的机器在12.04(我可以使用与远程相同的URL从另一个文件夹推送)而另一个人正在使用13.04.

最后,遇到问题的机器可以通过SSH正常访问该用户.

unix git ssh

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

如何让Grunt在运行另一个任务之前等待任务完成?

这是我的Gruntfile输出.

正如您在输出中看到的,有几个与异步任务相关的问题:

  1. imagemin被召唤,下一个直接前进.这使得它的输出出现在任务的最后,这是非常混乱的;
  2. build,这是一个自定义任务,在完成命令后正在使用var done = this.async()和调用done(); 但是,如果我单独执行任务,这只能正常工作; 用另一个任务运行它也使它也运行异步;
  3. 随着build以后的运行,jasmine没有什么可以测试,因此是无用的.

有没有办法解决这个问题?

javascript asynchronous node.js gruntjs

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