1

这是我第一次制作一个有许多用户访问它的 PHP 应用程序,所以我以前不必担心加载速度,现在我这样做了。

这些是我想到的方法,但它们似乎都有点“hack-ish”,我相信有更好的方法。

对于索引页,我可以这样:

<h1><?php $job->getTitle($id); ?></h1>
<p><?php $job->getDescription($id); ?></p>
<p><?php $job->getSomethingElse($id); ?></p>

类为:

function getTitle($id) {
    $query = "SELECT title FROM table WHERE id = $id";
    $result = $db->query($query);

    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo $row['title'];
}

function getDescription($id) {
    $query = "SELECT description FROM table WHERE id = $id";
    $result = $db->query($query);

    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo $row['description'];
}

ETC...

或者我可以有一个函数,将所有结果调用到一个数组中。将它们存储为字符串并在需要时将它们分解。

我的另一个想法与上面类似,除了我在课堂上做所有事情并回显 html。

就速度而言,输出我想要的东西的最佳方式是什么?

4

3 回答 3

2

我认为它最好执行一次查询..所以获取你想要的所有细节并在你想要的时候使用它

 function getDetails($id){
     $query = "SELECT title,description FROM table WHERE id = $id";
     $result = $db->query($query);

     return $result->fetch_array(MYSQLI_ASSOC);

 }

你可以像这样使用

 <?php  $details = $job->getDetails($id); ?>
 <h1><?php echo $details['title']; ?></h1>
 <p><?php echo $details['description']; ?></p>

我不知道更多关于这个......

于 2012-06-12T10:36:41.983 回答
2

为每个属性创建一个 getter 和 setter,运行 1 个查询,设置所有变量并使用 getter 获取实际值。

像这样的东西应该工作:

    private $name;
    private $street;
    private $number;

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setNumber($number)
    {
        $this->number = $number;
    }

    public function getNumber()
    {
        return $this->number;
    }

    public function setStreet($street)
    {
        $this->street = $street;
    }

    public function getStreet()
    {
        return $this->street;
    }


    public function getUser()
    {
        $query = "SELECT * FROM users WHERE x = y";

        $this->setName($result['name']);
        $this->setStreet($result['street']);
        $this->setName($result['number']);

    }
于 2012-06-12T10:37:41.953 回答
2

Jee,你听说过 MVC(模型-视图-控制器)设计模式吗?

虽然我不希望您重写整个应用程序,但您仍然可以习惯使用模型...通过这种(以非常简单的方式)方式您创建一个class Model具有__construct($id)查询数据库以加载所有必要数据的方法并将它们存储在私有/公共/受保护(无论什么让您感觉良好)属性中。

然后你getXYZ()在那个只返回它的属性值的模型上调用这些方法......

像这样:

类文章 { 私人 $title; 私人$描述;私人 $somethingElse;

    public function __construct($id) {
        $query = "SELECT title, description, somethingElse FROM table WHERE id = $id";
        $result = $db->query($query);

        $row = $result->fetch_array(MYSQLI_ASSOC);
        $this->title = $row['title'];
        $this->description = $row['description'];
        $this->somethingElse = $row['somethingElse'];
    }

    public function getTitle() {
        return $this->title;
    }

    public function getDescription() {
        return $this->description;
    }

    public function getSomethingElse() {
        return $this->somethingElse;
    }

就是这样...只需一个查询即可检索所有数据...

如果您还想编辑此模型,您还可以创建一个setXYZ($value)将设置的方法$this->XYZ = $value;和一个save()将更新数据库中这个非常具体的行的方法...

这些方法(get 和 set)被称为 getter 和 setter...

于 2012-06-12T10:40:55.723 回答