PHP类构造函数和方法

时间:2013-06-02 03:23:53

标签: php class function constructor

我刚开始学习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()函数没有返回任何值。

我无法弄清楚如何让它发挥作用。

4 个答案:

答案 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通过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

答案 3 :(得分:0)

此关键字用于访问当前类中的类成员。 你创建了一个类,你为变量$ food分配了一些值。 然后在您尝试访问变量的函数内,但$ food是类变量,我们无法访问没有对象或范围解析运算符的类成员。 &#34;这&#34;有当前的对象名称。