0

例如,如果我有一个名为的类,我images在其中查询数据库以获取图像 src、图像名称和其他一些字符串:

$sql = Nemesis::select("profile_picture_thumb, profile_picture_large, facebook_id", "users", "id = '{$_SESSION[user_id]}'");
list($profile_picture_thumb, $profile_picture_large, $facebook_id) = $sql->fetch_row();

有没有办法我可以,也许__construct将这些设置为$var我可以在类中的许多函数中访问它们?此外,除了简洁之外,这样做是否有任何性能优势?我会假设,因为您基本上查询数据库一次而不是在众多功能下并将其设置为类中的“全局”性能会增加......或者没有?

更明确:

class Images
{
    var $main_prepend = 'm_';
    var $thumb_prepend = 't_';
    var $default_ext = 'jpg';
    var $cropfactor;
    private $profile_picture_thumb;
    private $profile_picture_large;
    private $facebook_id;
    public function __construct()
    {
        $sql = Nemesis::select("profile_picture_thumb, profile_picture_large, facebook_id", "users", "id = '{$_SESSION[user_id]}'");
        list($profile_picture_thumb, $profile_picture_large, $facebook_id) = $sql->fetch_row();
        $this->profile_picture_thumb = $profile_picture_thumb;
        $this->profile_picture_large = $profile_picture_large;
        $this->facebook_id = $facebook_id;
    }
    public function profilePic($show = true, $delete = false)
    {
        if ($show) {
            echo '<script type="text/javascript">$(function() { $("#profile-picture").tipsy({fade: true}); });</script>';
            if (is_file(ROOT . $this->profile_picture_thumb)) {
                echo '<img src="' . reduce_double_slashes('../' . $this->profile_picture_thumb) . '" id="profile-picture" class="profile-picture" title="Your Profile Picture">';
            } elseif (!empty($this->facebook_id)) {
                // if there is no profile picture set, and user has listed fb profile picture, get profile picture
                $fb_p_thumb = "http://graph.facebook.com/{$facebook_id}/picture";
                $fb_p_large = "http://graph.facebook.com/{$facebook_id}/picture?type=large";
                echo '<img src="' . $fb_p_thumb . '" id="profile-picture" class="profile-picture" title="Facebook Profile Picture">';
            } else {
                echo '<img src="images/50x50_placeholder.gif" id="profile-picture" class="profile-picture" title="Click to add profile picture">';
            }
        }
        if ($delete) {
            if (is_file(ROOT . $this->profile_picture_thumb) || is_file(ROOT . $this->profile_picture_larg)) {
                if (!unlink(ROOT . $this->profile_picture_thumb) && !unlink(ROOT . $this->profile_picture_larg)) {
                    $msg->add('e', "Could not delete user profile picture!");
                }
            } else {
                $msg->add('e', "Files not found in directory.");
            }
        }
    }
    public function profilePicExists($msg = true, $delete = false)
    {
        if ($msg) {
            if (is_file(ROOT . $this->profile_picture_thumb)) {
                echo '<div class="ec-messages messages-success">Profile picture exists or was added! It may be required to refresh the page to view changes.</div>';
            }
        }
        if ($delete) {
            if (is_file(ROOT . $this->profile_picture_thumb)) {
                echo '<input name="doDelete" type="submit" class="btn btn-warning" id="doDelete2" value="Remove Profile Picture">';
            }
        }
    }

不工作。

4

1 回答 1

0
class Images {
    private $src;
    private $name;

    public function __construct($src, $name) {
        $this->src = $src;
        $this->name = $name;
    }

    public function get_src() {
        return $this->src;
    }

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

$instance = new Images('image.jpg', 'Cute Duck');
echo $instance->get_src();
echo '<br>';
echo $instance->get_name();

在您的 Images 类中,您将名称和源存储在两个类变量中,您可以在创建新的 Image 类时在构造函数中设置它们。您可以通过两个 getter 函数get_name()get_src().

您还可以将这些变量设置为 public,因此您可以直接访问它们:

class Images {
    public $src;
    public $name;
}

$instance = new Images();
$instance->src = 'image.jpg';
$instance->name = 'Cute Duck';

echo $instance->src;
echo '<br>';
echo $instance->name;

您可以像这样存储和运行查询:

class Images {
    private $query;
    private $result;

    public function __construct($query) {
        $this->query = $query;
        //run query than store it in $this->result;
    }

    public function get_result() {
        return $this->result;
    }
}

$instance = new Images('SELECT * FROM stuff');
echo $instance->get_result();

这样,您可以在构造函数中传递 SQL 语句,您可以在其中完成工作并存储结果。您可以通过 getter 或类中的任何其他函数访问结果。
请注意,这不是一个持久的解决方案,在您重新加载在服务器端使用该类的页面(或转到另一个页面)后,它会从头开始。但是您可以构建您的代码并将您经常使用的常用函数放入类中,因此您不必重复代码。
例如,您可以编写一个 Image 类,您可以在其中存储名称、大小、文件扩展名、来源等。您可以在创建类时在构造函数中提供这些,或者通过 setter 设置它们,或者如果类变量是公共的,则直接设置它们。
设置这些后,您可以使用类中的所有功能。例如,您可以编写一个复制图像的函数,一个调整大小或重命名它的函数,一个删除它的函数。任何时候你需要使用一个具体的图像,你只需创建一个类实例并调用所需的函数。
如果您想要执行更多操作,例如克隆图像,而不是删除原始图像,或者调整图像大小然后克隆它,您不必再次为图像设置所有设置,因为它们存储在类和函数可以访问它。

于 2013-08-04T22:44:38.270 回答