修改类函数内的类属性

时间:2013-02-16 17:21:20

标签: php class this

我从php.net网站获得了代码:

<?php
class foo {
    public $foo;
    public $bar;
    public function foo() {
        $this->foo = 'Foo';
        $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
}

$foo = new foo();
echo <<<EOT
I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
EOT;
?>

但我很困惑,每个“foo”代表什么?你真的可以在不调用函数的情况下修改方法(函数)中的属性(变量)吗?

我写了类似的代码但没有发生任何事情

<?php
class page {
    public $meta;
    public $buttons;
    public function show_meta() {
        $this->meta = "I'm a website";
        $this->buttons = array(
            "home" => "index.php",
            "about" => "about.php"
            );
    }
}

$index = new page();
echo $index->meta;
echo $index->buttons["home"];
?>

我是一名学习者,我需要你的帮助:)

3 个答案:

答案 0 :(得分:2)

function foo是一个PHP4风格的构造函数(请注意,该函数与该类具有相同的名称)。在PHP5中,您可以改为编写function __construct()

new foo()实际调用构造函数,启动变量。

答案 1 :(得分:0)

首先,是的,因为您的属性为public

在第二种情况下,您使用字符串引用以删除警告。

  $index->buttons["home"];

您永远不会调用show_meta,因此永远不会填充数组。

答案 2 :(得分:0)

这是构造函数方法的旧php语法。构造函数是特殊方法,只要创建了类中的新对象,就会调用这些方法。构造函数的新命名约定说,所有构造函数都命名为__construct

要使上面的代码生效,你必须在访问两个变量之前调用show_meta或者使show_meta成为构造函数。

$index = new page();
$index->show_meta();
echo $index->meta;
echo $index->buttons["home"];

btw .. home是一个字符串,应该在“”里面,或者你至少提出一个警告。