我有一个用PHP编写的有用对象,我们称之为my_class.php
<?php
class my_class{
var property;
function __construct($conn){
$query = "SELECT * FROM bla bla bla";
$rs2 = mysql_query($query , $conn);
//... do stuff with results etc.
}
function do_something(){
//more code here
}
}
?>
我想对这个类做的是能够通过以下方式在 EE 站点的管理部分使用它:
$this_obj = new my_class($conn);
由此引起的问题如下:
1)当你在EE之外时,$conn将是与MySql的连接,最好将其放置在可以使用EE数据库调用的地方。
2)你会把一个类放在哪里,以便EE可以多次启动它?
为了使这个对象有用,它需要实例化几十次,我希望使用这些对象的数组,而不仅仅是一个实例。
提前感谢您的任何见解!
您可能想浏览一下 CodeIgniter 文档。ExpressionEngine 基于 CI,因此,如果您正在寻找最佳实践,请查看 CI 文档。
您可以将类文件存储在任何您想要的地方 - 但大多数人将 in library/或 lib/存储在他们正在开发的插件文件夹中。这样您就可以调用$this->EE->load->library('whatever');
看看用于进行数据库调用的模型 - 还可以看看CI DB/ActiveRecord类和DB forge类。
希望对您有所帮助!
下面介绍如何在EE模块的控制面板中实例化一个可以处理自己的MySQL的对象。
控制面板位于模块的 .mcp 文件中,正如 Philip 所说,将其用作库是要走的路。
位于表达式引擎/third_party/your_module/libraries/my_class.php 中的类文件
<?php
class my_class{
var property;
function __construct(){
$this->EE = & get_instance();
}
function init($some_id){
$query = "SELECT * FROM table WHERE whatever='$some_id' ";
$results = $this->EE->db->query($query);
if ($results->num_rows() > 0) {
foreach ($results->result_array() as $row) {
//do your thing here
}
}
}
function do_something(){
//more code here
return $results;
}
}
现在此代码位于正确的位置,即库文件夹,您可以从 mcp 文件访问它,从提供视图的任何方法中。
//somewhere in the method you're using in your module
$this->EE->load->library('my_class.php', '', 'reference_name');
//passing something here to the constructor will throw warnings.
$obj = new $this->EE->reference_name();
$obj->init($some_id);
$tmp = $obj->do_something();
上面的$obj是 my_class 类的一个实例,$tmp将是 do_something 方法产生的任何内容。 无需向对象传递MySQL连接,如果您在上面的构造函数中有第一行,则表达式引擎会为您执行此操作。