我从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"];
?>
我是一名学习者,我需要你的帮助:)
答案 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是一个字符串,应该在“”里面,或者你至少提出一个警告。