1

新手问题,我的类方法中有变量,我是否必须将它们设为类变量,以便我可以使用 $this 访问它们?如果不是,请解释我何时使用或制作类变量?

private function is_valid_cookie()
{
    $securedtoken = $this->input->cookie('securedtoken');
    // Checks if the cookie is set
    if (!empty($securedtoken)) {
        // Checks if the cookie is in the database
        $s = $this->db->escape($securedtoken);
        $query = $this->db->query("SELECT cookie_variable FROM jb_login_cookies WHERE cookie_variable=$s");
        if ($query->num_rows() != 0) {
            // Now let us decrypt the cookie variables
            $decoded = unserialize($this->encrypt->decode($securedtoken));
            $this->login($decoded['username'], $decoded['password']);
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

正如你们所看到的,我有变量 $securedtoken 和 $decoded = array(),我无法决定是否必须将它们设为类变量并使用 $this 访问它们

4

4 回答 4

1

你有,是的。您可以像这样声明类变量:

class Dog
{
    protected $name = 'Spot';

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

您可以在文档中阅读有关属性(成员变量)的更多信息。

于 2012-08-13T21:43:37.937 回答
1

实际上,我尝试将类级变量的使用减少到它们将在多个方法中通用的情况,或者它们将从类外部的代码中引用(直接或通过 getter/setter)。如果变量只是在方法的局部范围内需要,不要用它污染类。

于 2012-08-13T21:44:15.367 回答
1

当您尝试在类中的不同函数中共享这些变量时,您将需要创建类变量。然后,您需要为这些属性使用不同的访问修饰符(公共、私有、受保护),具体取决于外部代码是否可以查看它们、子类是否可以查看它们,或者什么都没有。

于 2012-08-13T21:44:26.473 回答
1

您不必使它们成为实例变量。您也可以将它们设为静态变量或常量变量!您使用类变量来描述类的属性。即类有什么。

使您的术语正确也很重要。您正在询问有关制作变量和实例变量的问题。类变量 (http://en.wikipedia.org/wiki/Class_variable) 指的是静态变量

对于您的具体示例,如果您的两个变量仅用于该函数,则不应将它们设为实例变量。没有理由在全班共享它们另一方面,如果您需要在其他方法或其他地方再次使用它们,则不是。你应该。

决定你想要什么样的变量和什么样的访问是一个设计决定。

好的起点是面向对象的 php 概述。http://php.net/manual/en/language.oop5.php

和基本的初学者教程 http://www.killerphp.com/tutorials/object-oriented-php/

于 2012-08-13T21:48:14.510 回答