我正在寻找创建一个被调用的对象将数据传递到数据存储.我的实现使用MySQLi,但我想允许其他开发人员使用他们想要的任何数据存储.
我认为静态方法可能是最好的答案,但对它们不熟悉我不确定我是否真的会创建大量连接或重用相同的连接.
<?php
class RECORDS {
protected $conn;
public function __construct() {
//contect to DB
$conn = $this::connection();
}
public static function &connection(){
$conn = NULL;
if($conn==NULL){
$conn = new mysqli(_DB_HOST_, _DB_USER_, _DB_PASS_, _DB_HOST_);
if ($mysqli->connect_errno) {
die("Failed to connect to MySQL: (" .
$mysqli->connect_errno . ") " .
$mysqli->connect_error);
}
}
return $conn;
}
// ... methods that do stuff
}
Run Code Online (Sandbox Code Playgroud)
我是否对静态方法有了正确的认识,我是否会重复使用相同的连接或创建新的连接?
我注意到一些云托管解决方案的磁盘IO非常糟糕.这会导致一些问题可以通过让脚本等到磁盘不太忙而解决.
使用PHP可以监视文件系统的繁忙(或不那么忙)状态而不会让事情变得更糟吗?
我有一个类,它需要一些基本的HTML5,并且有一些DOM魔术将它变成一个类,它是一个扩展的simpleXMLElement.这一切都始于一个名为XPage的"工厂"(我可能会略微滥用这个术语).
因此,我们可能会
<?php
$MyPage = new XPage($HTML);
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我现在需要做的是选择XML文档的某些部分,以便它们可以"加入书签"(我确信它有一个更好的名称)所以你可以这样做
$MyPage->ThatBit("foo")->addChild('p',$MyParagraph);
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够去
$MyPage->page()->body->header->RememberThisBitAs("foo");
Run Code Online (Sandbox Code Playgroud)
或者直观相似的东西.然后应该发生的是对象$ MyPage(类型为XPage)应该传递参考,在这种情况下是html/body/header(可能不是正确的XPath表示法,但希望你可以遵循).
这个想法是最常见的访问区域可以更顺利地获得.这就是SimpleXML类(即使是我的扩展名)遇到的东西,如果没有另一个工厂,它也无法做到,而且XPage也是单例.
然而,它是XPage类($ MyPage),它包含"书签"数组.据我所知,没有办法在SimpleXML的迭代中传递引用,这样孩子或孩子的孩子就不能告诉工厂"请给我加书签".
这会让我做一些讨厌的事情:
$MyPage->addBookmark("foo",
$MyPage->page()->body->header->getChildren() );
Run Code Online (Sandbox Code Playgroud)
这似乎不对.
要么
$MyPage->page()->body->header->RememberThisBitAs("foo",$MyPage);
Run Code Online (Sandbox Code Playgroud)
这不是那么糟糕但仍然"感觉"错了.
如何在没有过多的对象耦合或丑陋的自我引用的情况下处理这个问题?
更新
我想知道是否可以使用debug_backtrace反向遍历一个类,但答案似乎是否定的.
在PHP中,是否可以反向遍历Traversable类以查找根对象?
其他类似的测试表明,在可遍历堆栈中的任何其他元素上都无法访问在元素上设置类变量的值.
我将专注于包装器的建议.
更新
SimpleXML实际上不是真正的对象,而是系统资源.这可以解释我的痛苦来自哪里.说说明:http://php.net/manual/en/class.simplexmlelement.php
因此,对于所有对象感觉就像一串对象相互调用,实际上并非如此.
如何使用BASH(或其他脚本语言)将充满IP块的文本文件批量添加到IPTables?或者是否有其他阻止这些地址范围的方法?
编辑:换句话说有没有办法编程迭代文件并构建相关的条目?
我想在我的父主题中的PHP文件中进行简单的修改:
wp-content\themes\sailing\inc\widgets\gallery\tpl\base.php
Run Code Online (Sandbox Code Playgroud)
所以我在我的子主题中创建了相同的文件夹结构,并在此文件中进行了我需要的修改.我还复制/粘贴了声明这个小部件所需的所有PHP文件.
wp-content\themes\sailing\inc\widgets\widgets.php
wp-content\themes\sailing\inc\widgets\gallery\gallery.php
wp-content\themes\sailing-child\inc\widgets\widgets.php
wp-content\themes\sailing-child\inc\widgets\gallery\gallery.php
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
call_user_func 和使用变量变量有显着区别吗?
以这样的类为例:
class someClass{
protected function action_this() { ... }
protected function action_that() { ... }
}
Run Code Online (Sandbox Code Playgroud)
这是更好或更有效
class myClass extends someClass{
public function doAction($action='this'){
$method="action_{$action}";
if(is_callable (array($this,$method)) ){
call_user_func(array($this,$method));
}
}
}
Run Code Online (Sandbox Code Playgroud)
比
class myClass extends someClass{
public function doAction($action='this'){
$method="action_{$action}";
if(is_callable (array($this,$method)) ){
$this->$method();
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否存在一种可能优于另一种的条件?