php - 减少 Mysql 查询和 OOP

标签 php mysql oop

假设我有:

 class language_text{
    protected $id;
    protected $keyword;
    protected $language;
    protected $text;

   function __construct($clave,$lan){
        $consulta = mysql_query("SELECT id,clave,lengua,texto,id_usuario FROM textos  WHERE clave = '$clave' AND lengua = '$lan'");
         if(mysql_num_rows($consulta)>0){
        while($item = mysql_fetch_array($consulta)){
            $this->id = $item['id'];
            $this->clave = $item['clave'];
            $this->lengua = $item['lengua'];
            $this->texto = $item['texto'];
            $this->id_usuario = $item['id_usuario'];
                        $this->exists = true;

        }
                return true;
         }else{
             $this->exists = false;
             $this->clave = $clave;
             return $this->clave;
         }

    }

    }
    function get_texto_clave_html($clave){

        $clave = htmlspecialchars($clave);
        $lan = detectarIdioma();
        $temporal = new texto($clave, $lan);
        if($temporal->exists()==true){
            return $temporal->get_texto_html();
        }else{
            return $clave;
        }

    }

}

所以每次我都需要一些我调用的语言文本:get_texto_clave($lan, $keyword),但在每个页面中可能有大约 25 个文本,所以我想我应该将所有语言加载到一个数组中,然后访问它而不是数据库。

例如:

  • 我想要西类牙语的欢迎文字 get_texto_clave(2,'welcome_html');
  • 我想要西类牙语的再见文本 get_texto_clave(2,'bye_bye_html');

问题:

  • 你怎么看?
  • 您会添加一个新类,例如 language_text_collection 或类似的类吗?

感谢 experimentX 的贡献,这里我们有了当前的解决方案:

使用静态方法获取对象的实例。

$data = language_text::getData($lan, $keyword);

在 getData 方法上

public function getData($lan, $keyword)
{
        $data = array();
        //query here
        $consulta = mysql_query("SELECT id,clave,lengua,texto,id_usuario FROM textos  WHERE clave = '$clave' AND lengua = '$lan'"); 
        while($item = mysql_fetch_array($consulta))
        {
            $selfitem = new self;

            $selfitem->id = $item['id'];
            $selfitem->clave = $item['clave'];
            ...
            ...

            $data[] = $selfitem;
        }
        return $data[]; //end the end you send an array of data
}

现在 $data 将包含一个对象数组。使用循环访问其属性。

foreach($data as $d)
{
   echo $d->id;
   echo $d->clave;
   ...
   ...
}

但是我还看不到,

我假设在 $data 中我们有当前 languageId 的所有语言文本, 那么,我如何才能从 $data 中提取“welcome_body”?

最佳答案

更新::

我认为数据库不太适合这种操作。我建议您修改数据库设计。

+----+---------------+---------------+----------+
| id | message_type  | message_text  | language |
+----+---------------+---------------+----------+
|  1 | good morning  | good morning  | english  |
|  2 | good_morning  | something.... | spanish  |
+----+---------------+---------------+----------+
  1. 首先创建一个数据库如

  2. 像这样创建一个数据库对象来查询数据库。
    //不要使用关键字,根本没用
    //当然,说早安和最后……用某种语言说再见是毫无意义的
    //而且从逻辑上讲,它是无用的,因为我们必须查询数据

    $message = language_text::getData($lan);

  3. 您的查询必须是这样的SELECT* FORM message WHERE language='english' 之类的。//另外最好加上DISTINCT来选择。我稍后会解释原因。

  4. 并使用内容 message_type 类型向对象添加属性。

    while($item = mysql_fetch_array($consulta))
    {
    $selfitem = new self;
    $selfitem->$item['message_type'] = $item['message_type'];
    $data[] = $selfitem;

    返回 $data;

  5. 现在回显属性echo $data->hello_message; or goodbye message

现在,您必须考虑不要为同一语言添加 message_type 的两个重复条目。因此,最好在 select 语句中添加 DISTINCT。而且你还必须检查它。

其他方式:您还可以使用静态消息创建数据库,它不灵活,但可靠,可以与我介绍给您的其他方法一起使用。

+----+------------+--------------+-------------+
| id | language   | goodmorning  | goodnight   |
+----+------------+--------------+-------------+
|  1 | english    | good morning | good night  | -- and so on and on
|  2 | spanish    | something....| ..........  | -- and so on and on
+----+---------------+-----------+-------------+

注意::通常一次加载页面内容而不是一个一个加载

PS::你的英语很糟糕。

关于php - 减少 Mysql 查询和 OOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5565430/

相关文章:

Mysql查询查找指定行

c# - 如何从另一个类的 listBox1_SelectedIndexChanged 事件中获取值?

javascript - Resig的JS继承脚本...父类的属性被覆盖

javascript - Symfony 2.3.6 嵌套表单

php - 如何存储og meta标签信息?

php - OSClass 中的 JavaScript 在父类别在 Firefox 中无效后显示子类别

mysql - 删除数据库中除最后日期以外的所有项目

php - 如何从我的查询中只访问一条记录

java - 我没有从我的 java 应用程序中得到预期的输出

php - 处理静态但可扩展列表的最佳方法