0

我从 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"];
?>

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

4

3 回答 3

2

function foo是一个 PHP4 风格的构造函数(注意函数与类同名)。在 PHP5 中,您将function __construct()改为编写。

new foo()实际上调用构造函数,初始化你的变量。

于 2013-02-16T17:24:11.937 回答
0

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

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

  $index->buttons["home"];

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

于 2013-02-16T17:24:23.350 回答
0

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

要使上面的代码正常工作,您必须在访问这两个变量之前调用 show_meta 或使 show_meta 成为构造函数。

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

顺便说一句.. home 是一个字符串,应该在“”内,或者你至少提出一个警告。

于 2013-02-16T17:24:47.450 回答