在表达式引擎模块开发中,哪里是添加PHP类进行实例化的好地方



我有一个用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连接,如果您在上面的构造函数中有第一行,则表达式引擎会为您执行此操作。

最新更新