2

我有一个用 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) $conn 当您在 EE 之外时将成为与 MySql 的连接,最好将其放置在可以使用 EE 数据库调用的地方。

2)你会把一个类放在哪里,以便EE可以多次实例化它?

为了使这个对象有用,它需要被实例化几十次,而且我想要使用这些对象的数组而不是一个实例。

提前感谢您的任何见解!

4

2 回答 2

3

您可能需要查看CodeIgniter 文档。ExpressionEngine 基于 CI,因此如果您正在寻找最佳实践,请查看 CI 文档。

你可以将你的类文件存储在任何你想要的地方——但是大多数人将它们存储在他们正在开发的插件文件夹中的 library/ 或 lib/ 中。这样你就可以调用 $this->EE->load->library('whatever');

查看用于进行数据库调用的模型 - 还可以查看CI DB / ActiveRecord类和DB forge类。

希望有帮助!

于 2012-06-28T15:37:26.227 回答
1

以下是如何在 EE 模块的控制面板中实例化可以处理自己的 MySQL 的对象。

控制面板位于模块的 .mcp 文件中,正如 Philip 所说,将其用作库是可行的方法。

类文件位于 expressionengine/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 连接,如果您在上面的构造函数中有第一行,ExpressionEngine 会为您执行此操作。

于 2012-06-29T20:12:42.497 回答