2013-06-02 221 views
-1

我刚开始学习PHP和我有它的语法的麻烦。我正在学习如何在php中编写一个类,并且我使用了一种类似于Java的语法。但是,我既不能使用它的构造函数也不能使用常规方法工作,我无法弄清楚原因。PHP类的构造函数和方法

<?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行,我只有一条线的工作(打印出$主食变量)。构造函数没有将“小鸡”值赋值给$ food。 getstaple()函数没有返回任何值。

我无法弄清楚如何得到这个工作。

+0

您需要使用$ this作为实例属性,例如$ this-> food = $ fd。与Java不同,您不能直接引用属性名称。 –

+0

你会卖一些[bento](http://en.wikipedia.org/wiki/Bento)吗?送一些西班牙! (; –

回答

2

要引用类成员,你应该使用这个 - $>食物或$这个 - >短纤

class bento { 
    public $food; 
    public $staple = "rice"; 
    protected $veggie = "kale"; 

    public function __construct($fd){ 
    $this->food = $fd; 
    } 

    public function getstaple(){ 
    return $this->staple; 
    } 
} 
+0

太好了,谢谢你 –

+0

另外,你知道如何实现多个构造 在Java中,我可以做一些事情,如: 类便当{ 便当(){ 这个(“米”)!? ; } 便当(字符串FD){ 食品= FD; } –

+0

可以用PHP得到最接近的是与参数的默认值的构造函数:在Java中,你__construct($ FD = '米') – jcsanyi

0

在Java中一样,你需要使用“本”关键字来访问你的类变量。在PHP中,你会做这样的事情:

$this->methodName(); 

$this->variableName 
+0

其实不需要明确引用“this”;这是与PHP的区别 –

+0

非常感谢你 –

0

在PHP中所有的变量是局部的,他们是中定义的范围(与像超全局变量$ _GET几个语言提供的例外, $ _POST,$ REQUEST,$ _SERVER等)。

这意味着当您在您的方法中引用$ food时,您指的是$ food,因为它在该方法中定义,换句话说,函数变量与您想要的实例属性。

例如方法PHP很好,可以为您创建对名为$this的方法进行调用的实例的引用。这允许您通过此格式引用对象本身内的对象的属性和方法。

$this->food = $fd 

另一件需要注意的是类方法和属性不能以这种方式访问​​。他们需要使用范围解析操作::所以得到在staticly定义的类属性或方法可以使用:

ClassName::method(); 

ClassName::$property; 

$this PHP提供了一些简单的访问通过selfstatic关键字分类。

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 
0

这个关键字用于当前类中访问类成员。 您可以创建您为变量$ food分配一些值的类。 然后在你尝试访问变量的函数中,但$ food是类变量,我们无法在没有对象或范围解析运算符的情况下访问类成员。 “this”有当前的对象名称。

相关问题