我花了最后几个小时试图找到一个答案,以"最好",最合乎逻辑的方式写一个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) 根据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) 我最近了解了依赖注入的优点,但我想知道我是否应该在我的项目中使用它,因为我甚至不需要完整的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代码
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()测试中放置了任何值,那么它当然可以按预期工作.有没有办法测试空参数?或者我是否错误地尝试为不应该在单元测试范围内的事物创建测试?
本教程显示了一个css blur示例
img {
+filter: blur(30px);
}
Run Code Online (Sandbox Code Playgroud)
然后继续提到"注意:+代表供应商前缀".为什么这里使用加号而不是"-webkit-"之类的供应商前缀?
将数组定义为......
$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中的破折号和小写等效替换所有大写字母?
如understandRegexBetter要understand-regex-better?
我的Google-fu和以下代码的实验并没有让我走得太远.
echo preg_replace('/[A-Z]+/', "-$'", "understandRegexBetter");
Run Code Online (Sandbox Code Playgroud)
编辑:我忘了明确说明第一个字符永远不会是大写的.