如何在方法中声明属性?

时间:2011-12-27 10:35:50

标签: php methods global-variables

我几天前开始用PHP编写新课程。

我想在其他方法中使用的方法中声明一个新的“公共属性”。

这就是我的想法(当然它不起作用!):

    class hello {

        public function b() {
            public $c = 20; //I'd like to make $c usable by the method output() 
        }

        public function output() {
            echo $c;
        }
    }

$new = new hello;
$new->output();

提前感谢任何提示。

8 个答案:

答案 0 :(得分:6)

  

我想在其他方法中使用的方法中声明一个新的“公共属性”。

如果其他方法属于同一个类,则不需要公共属性,私有属性将满足您的需求。私有属性只能在同一个类中访问,这有助于简化操作。

还要了解声明属性和为其分配值之间的区别。加载代码时进行声明,并在执行时进行分配。因此,声明(或定义)属性(私有或公共)需要PHP语法中的特殊位置,即在类的主体中而不是在函数内部。

您可以使用PHP中的特殊变量$this来访问类中的属性。

  

从对象上下文中调用方法时,伪变量 $this 可用。 $this 是对调用对象的引用(通常是方法所属的对象[to])。 From PHP Manual

私有财产示例:

class hello {
    private $c; # properties defined like this have the value NULL by default

    public function b() {
        $this->c = 20; # assign the value 20 to private property $c
    }

    public function output() {
        echo $this->c; # access private property $c
    }
}

$new = new hello;
$new->output(); # NULL
$new->b();
$new->output(); # 20

希望这有帮助。您使用私有属性,因为程序中的其他所有内容都不需要关心它,因此在您的类中,您知道没有其他任何东西可以操纵该值。另见Visibility­Docs

答案 1 :(得分:2)

当你在方法(函数)中定义它时,类的每个变量都是公共的!您可以通过以下方式执行此操作:

class hello {

    public function b() {
         $this->c = 20; 
    }

    public function output() {
        echo $this->c;
    }
}

$new = new hello;
$new->output();

或让函数b()返回$c,然后将其作为变量传递给output()

class hello {

    public function b() {
         return $c = 20; 
    }

    public function output($c) {
        echo $c;
    }
}

$new = new hello;
$c = $new->b();
$new->output($c);

记住函数中的所有变量只能从该特定函数中访问...除非你当然使用$this,这使变量成为类属性! 此外,建议只使用return个变量......如果您知道我的意思,那么echo仅适用于实际输出,纯HTML,模板和视图:)

答案 2 :(得分:2)

请改为尝试:

class hello {

    public $c = null;

    public function b() {
        $this->c = 20; //I'd like to make $c usable by the method output() 
    }

    public function output() {
        echo $this->c;
    }
}

答案 3 :(得分:1)

class hello {
    public $c;
    public function b() {
        $this->c = 20;
    }

    public function output() {
        $this->c;
    }
}

答案 4 :(得分:1)

注意:如果您需要在其他方法中使用某个属性,则无需将该方法声明为公共属性,则应将该属性声明为私有,并且您可以访问财产没有问题:

class hello {  
    private $c;  
    public function b() {  
        $this->c = 20;  
    }  
    public function output() {
        $this->c;
    }  
}  

答案 5 :(得分:0)

class hello {
 public $c;
        public function b() {
            $this->c = 20; //I'd like to make $c usable by the method output() 
        }

        public function output() {
            return $this->c;
        }
    }
$new = new hello;
echo $new->output();

答案 6 :(得分:0)

class hello {
        var $c;

        function __construct() { // __construct is called when creating a new instance
            $this->c = 20;
        }

        public function getC() {
            return $this->c; 
            // beter to return a value this way you can later decide what to do with the value without modifying the class
        }
    }

$new = new hello; // create new instance and thus call __construct().
echo $new->getC(); // echo the value

答案 7 :(得分:0)

像这样重写这段代码: -

  class hello {

       public $c;
        public function b() {
            public $this->c = 20; //I'd like to make $c usable by the method output() 
        }

        public function output() {
            echo $this->c;
        }
    }

$new = new hello;
$new->output();