我刚开始学习PHP,我的语法有问题。我正在学习如何在php中编写一个类,我使用的语法类似于Java。但是,我既不能使用它的构造函数也不能使用常规方法,我无法弄清楚原因。
<?php
class bento {
public $food;
public $staple = "rice";
protected $veggie = "kale";
public function __construct($fd){
$food = $fd;
}
public function getstaple(){
return $staple;
}
}
$chicken=new bento("chick");
echo "<br>".$chicken->food;
echo "<br>".$chicken->staple;
$fd=$chicken->getstaple();
echo "<br>".$fd;
echo "<br>".$chicken->getstaple();
?>
这是我得到的结果:
//result
rice
//end of result
基本上,在4行中,我只有一行工作(打印出$ staple变量)。构造函数没有为$ food分配“chick”值。 getstaple()函数没有返回任何值。
我无法弄清楚如何让它发挥作用。
答案 0 :(得分:2)
要引用集体成员,您应该使用$ this-&gt; food或$ this-&gt; staple
class bento {
public $food;
public $staple = "rice";
protected $veggie = "kale";
public function __construct($fd){
$this->food = $fd;
}
public function getstaple(){
return $this->staple;
}
}
答案 1 :(得分:0)
在java中,您需要使用“this”关键字访问类变量。在php中,你会做类似的事情:
$this->methodName();
或
$this->variableName
答案 2 :(得分:0)
在PHP中,所有变量都是在其定义范围内的本地变量(使用一些语言提供的异常,如超级全局$ _GET,$ _POST,$ REQUEST,$ _SERVER等。)
这意味着当你在方法中引用$ food时,你指的是$ food,因为它是在该方法中定义的,换句话说是一个函数变量,而不是你想要的实例属性。
例如PHP方法非常好,可以为您创建一个名为$this
的方法调用实例的引用。这允许您通过此方法在对象内部引用对象的属性和方法格式。
$this->food = $fd
需要注意的另一件事是类方法和属性不能以这种方式访问。它们需要使用范围解析运算符::
,以便获得您将使用的静态定义的类属性或方法:
ClassName::method();
或
ClassName::$property;
与$this
一样,php通过self
和static
关键字提供对类属性的一些轻松访问。
self
是对定义静态方法的类的引用。
static
是对调用静态方法的类的引用。
为了说明差异,请参阅此代码
class A {
static public $toWho = "Class A";
static public function sayHelloSelf(){
echo "Hello ".self::$toWho;
}
static public function sayHelloStatic(){
eecho "Hello ".static::$toWho;
}
}
class B extends A {
static public $toWho = "Class B";
}
B::sayHelloSelf(); // echos Hello Class A
B::sayHelloStatic(); // echos Hello Class B
答案 3 :(得分:0)
此关键字用于访问当前类中的类成员。 你创建了一个类,你为变量$ food分配了一些值。 然后在您尝试访问变量的函数内,但$ food是类变量,我们无法访问没有对象或范围解析运算符的类成员。 &#34;这&#34;有当前的对象名称。