您是否曾使用单独的表来"生成"DB的人工主键(以及为什么)?我的意思是拥有一个包含两列,表名和当前ID的表 - 通过简单地用该表名锁定行,获取键的当前值,增加它,您可以使用该表为某些表获取新的"ID"一个,解锁行.为什么您更喜欢这个超过标准整数标识列?
PS"想法"来自Fowlers模式的企业应用程序架构,顺便说一下......
未设置索引时$ _GET会返回什么?(在PHP手册中找不到关于$ _GET的任何内容.)
我写了这个来检查,如果$ _GET ['id']是否设置 - 如果不是,则将$ id设置为false:
<?php $id = (isset($_GET['id'])) ? $_GET['id'] : false ?>
Run Code Online (Sandbox Code Playgroud) 维基百科引用的DI的定义指出:
A.高级模块不应该依赖于低级模块.两者都应该取决于抽象.B.抽象不应该依赖于细节.细节应取决于抽象.
我正在尝试将该原则应用于我的代码:
class Printer{
private $logger;
function __construct(Zend_Log $logger){
$this->logger=$logger;
}
function print(){
//Some code
$this->logger->log('Logger in action ;)');
}
}
Run Code Online (Sandbox Code Playgroud)
既然为什么Printer类依赖于Zend_Log哪个既不是抽象类也不是接口,那么我就违反了依赖性倒置原则.
如何知道Zend_Log不扩展抽象类也不实现接口?
这应该是显而易见的,但我对PHP变量范围有点困惑.
我在构造函数中有一个变量,我想稍后在同一个类的函数中使用它.我目前的方法是这样的:
<?php
class Log(){
function Log(){
$_ENV['access'] = true;
}
function test(){
$access = $ENV['access'];
}
}
?>
Run Code Online (Sandbox Code Playgroud)
有没有比滥用环境变量更好的方法呢?谢谢.
我正在使用Phing的dbdeploy任务来管理我的数据库模式.只要我的delta文件的查询中没有错误,这工作正常.
但是,如果出现错误,dbdeploy将直接运行增量文件到错误的查询,然后中止.这让我有些沮丧,因为我必须手动回滚changelog表中的条目.如果不这样做,dbdeploy将假定在后续尝试中迁移成功,因此任何重试都不会执行任何操作.
所以问题是,有没有办法让dbdeploy使用事务,还是可以建议任何其他方法在发生错误时自动进行phing回滚?
注意:我对Phing并不熟练,所以如果这涉及编写自定义任务,那么任何示例代码或带有更多信息的URL都会受到高度赞赏.谢谢
我试图通过以下setInfoClass方法将自定义类设置为迭代器:
使用此方法设置将在调用getFileInfo和getPathInfo时使用的自定义类.传递给此方法的类名必须从SplFileInfo派生.
我的班级是这样的(简化示例):
class MyFileInfo extends SplFileInfo
{
public $props = array(
'foo' => '1',
'bar' => '2'
);
}
Run Code Online (Sandbox Code Playgroud)
迭代器代码是这样的:
$rit = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/some/file/path/'),
RecursiveIteratorIterator::SELF_FIRST);
Run Code Online (Sandbox Code Playgroud)
既然RecursiveDirectoryIterator是通过继承DirectoryIterator也是一个SplFileInfo对象,它提供了setInfoClass方法.它没有在手册中列出,但反射显示它在那里:
shell$ php --rc RecursiveDirectoryIterator
// ...
Method [ <internal:SPL, inherits SplFileInfo> public method setInfoClass ] {
- Parameters [1] {
Parameter #0 [ <optional> $class_name ]
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是在迭代目录时
$rit->getInnerIterator()->setInfoClass('MyFileInfo');
foreach($rit as $file) {
var_dump( $file );
}
Run Code Online (Sandbox Code Playgroud)
我得到以下奇怪的结果
object(MyFileInfo)#4 (3) …Run Code Online (Sandbox Code Playgroud) 不知道如何解释.我们来举个例子吧.说我想分开这句话
"今天是个好日子."
成
today
today is
today is a
today is a great
today is a great day
is
is a
is a great
is a great day
a
a great
a great day
great
great day
day
Run Code Online (Sandbox Code Playgroud)
这个想法是在一个句子中得到所有顺序组合.
我一直在想什么是PHP中最好的方法.欢迎任何想法.
我想知道在提交文件时,在PHP中进行抽象类和子类的最佳(和真实单词)实践是什么.
我有abstract class games,我想知道我是否应该将子类放入单独的文件和require_once('games.class.php');单独的文件或只是在abstract class games文件中的每个子类?
谢谢!
我正在尝试读取一个大的xml文件(大约40 MB),并使用此数据更新我的应用程序的数据库.
看来我使用XMLReader和simplexml_import_dom()在经过的时间/内存方面找到了一个很好的折衷方案但是我无法在名称中获得带冒号的属性值...例如<g:attr_name>.
如果我只是为每个"产品"节点使用$ reader-> read()函数,我可以将值作为$ reader-> value进行检索,但如果我展开()节点并使用$ doc-> importNode复制它,则此属性为忽略.
$reader = new XMLReader();
$reader->open(__XML_FILE__);
$doc = new DOMDocument;
while ($reader->read()) {
switch ($reader->nodeType) {
case (XMLREADER::ELEMENT):
if($reader->localName=="product"){
$node = simplexml_import_dom($doc->importNode($reader->expand(), true));
echo $node->attr_name."<br><br>";
$reader->next('product');
}
}
}
Run Code Online (Sandbox Code Playgroud)
可能我会想念一些事情......任何建议都会非常贴切!
谢谢.
我是HTML 5的新手,我在查找各种 W3 HTML标准化文档时遇到问题,以获取属性的状态.
例如,自HTML 4.01起,不应再使用bgcolor该<body>元素的属性.它被弃用了.(见:http://www.w3.org/TR/html4/present/graphics.html#h-15.1.1).
但它在HTML 5中的状态是什么?在HTML标记规范中,该属性被标记为过时(请参阅:http://www.w3.org/TR/html-markup/body.html).
这是否意味着本书,该属性在HTML 5中不再存在?
考虑编写一个标准的符合客户端,我应该将文档中的哪个引用与属性进行精确和定义的处理?只是放弃它,因为它已经过时了?把它留在那里,否则对它充耳不闻(有一个属性节点,但它没有意义)?
标准化文件中记录了哪些内容?