小编Isi*_*ius的帖子

PHP - 多个不同的数据库依赖注入类

我花了最后几个小时试图找到一个答案,以"最好",最合乎逻辑的方式写一个php数据库类同时连接到一个postgresql数据库和一个mysql数据库.此外,我想采用依赖注入设计,但对整个概念来说是新手.

到目前为止,我已经提出......

class Database {

    public function PgSqlConnect() {
            /* Connect to database */
        $host = 'localhost';
        $dbname = '---';
        $user = '---';
        $pass = '---';
        $timeout = 5;   /* seconds */

        try {
            $pgsql_dbh = new PDO("pgsql:host=$host; dbname=$dbname", $user, $pass); 
            $pgsql_dbh->setAttribute( PDO::ATTR_TIMEOUT, $timeout ); 
            $pgsql_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

            return $pgsql_dbh;
        } catch( PDOException $e ) {
            echo 'Unable to connect to database: ' . $e->getMessage();
        }
    }


    public function MySqlConnect() {
            /* Connect to database */
        $host = 'localhost'; …
Run Code Online (Sandbox Code Playgroud)

php database oop dependency-injection

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

如果键名不存在,array_column会返回什么?

根据https://wiki.php.net/rfc/array_column,array_column将很快添加到PHP中.但我无法理解RFC.如果命名密钥不存在,将返回什么?

例:

$arr = array(
    array(
        'firstname' => 'Bob',
        'lastname'  => 'Tomato'
    ),
    array(
        'firstname' => 'Larry',
        'lastname'  => 'Cucumber'
    )
);

$middlenames = array_column($arr, 'middlename');
Run Code Online (Sandbox Code Playgroud)

php associative-array

6
推荐指数
2
解决办法
2701
查看次数

我应该在我的php项目中使用依赖注入吗?

我最近了解了依赖注入的优点,但我想知道我是否应该在我的项目中使用它,因为我甚至不需要完整的mvc.现在我正在使用它,我意识到我写的每个页面都有额外的开销.例如...

    require_once '../../include/session.class.php';
    require_once '../../include/db.class.php';
    require_once '../../include/account.class.php';

    $objSession = new Session();
    $objDb      = new Db();
    $objAccount = new Account( $objSession, $objDb );
Run Code Online (Sandbox Code Playgroud)

account.class.php

class Account {
    ...
    public function __construct( Session $objSession, Db $objDb ) {
        $this->session = $objSession;
        $this->db = $objDb;
    }
}
Run Code Online (Sandbox Code Playgroud)

... Account类总是需要Db和Session,我只会有一个类.所以我的问题是,如果我在这种情况下使用DI,或者我应该使用......

account.class.php

require_once '../../include/session.class.php';
require_once '../../include/db.class.php';

class Account {
    ...
    public function __construct() {
        $this->session = new Session();
        $this->db = new Db();
    }
}
Run Code Online (Sandbox Code Playgroud)

...?

php oop dependency-injection

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

如何使用phpunit对无效参数进行单元测试?

我只是在学习单元测试.这个PHP代码

class Foo {
    public function bar($arg) {
        throw new InvalidArgumentException();
    }
}
Run Code Online (Sandbox Code Playgroud)

...

class FooTest extends PHPUnit_Framework_TestCase {
    public function testBar() {
        $this->setExpectedException('InvalidArgumentException');
        $dummy = Foo::bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

Failed asserting that exception of type "PHPUnit_Framework_Error_Warning" matches expected exception "InvalidArgumentException".从phpunit 失败了.如果在Foo::bar()测试中放置了任何值,那么它当然可以按预期工作.有没有办法测试空参数?或者我是否错误地尝试为不应该在单元测试范围内的事物创建测试?

phpunit unit-testing

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

"+过滤器"中的"+"是什么?

本教程显示了一个css blur示例

img {
    +filter: blur(30px);
}
Run Code Online (Sandbox Code Playgroud)

然后继续提到"注意:+代表供应商前缀".为什么这里使用加号而不是"-webkit-"之类的供应商前缀?

css

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

PHP:如何有选择地翻转数组键/值对?

将数组定义为......

    $my_array = array (
        'a' => array( 'BROWN' ),
        'b' => array( 'GREEN', 'MIN_LEN' => 2, 'MAX_LEN' => 60, 'SOMETHING' )
    );
Run Code Online (Sandbox Code Playgroud)

看起来像......

[a] => Array
    (
        [0] => BROWN
    )

[b] => Array
    (
        [0] => GREEN
        [MIN_LEN] => 2
        [MAX_LEN] => 60
        [1] => SOMETHING
    )
Run Code Online (Sandbox Code Playgroud)

我怎么能把它转换成......

[a] => Array
    (
        [BROWN] => BROWN
    )

[b] => Array
    (
        [GREEN] => GREEN
        [MIN_LEN] => 2
        [MAX_LEN] => 60
        [SOMETHING] => SOMETHING
    )
Run Code Online (Sandbox Code Playgroud)

请注意,键是字符串值而不是数字.或者,值为null是可以接受的.例如[BROWN] =>''.到目前为止,我能想到的只有array_flip,但我无法有选择地使用它.

php arrays

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

如何用正则表达式用短划线和小写替换所有大写字母?

如何用PHP中的破折号和小写等效替换所有大写字母?

understandRegexBetterunderstand-regex-better

我的Google-fu和以下代码的实验并没有让我走得太远.

echo preg_replace('/[A-Z]+/', "-$'", "understandRegexBetter");
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了明确说明第一个字符永远不会是大写的.

php regex

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