2013-06-02 4 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

Чтобы обратиться к члену класса, вы должны использовать $ this-> продукты питания или $ this-> штапельного

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, я могу сделать некоторые вещи, как: класса бенто { бенто() { это («рисового»)!? ; } бенто (String FD) { еды = FD; } –

+0

ближайший вы можете получить в PHP является конструктором со значениями по умолчанию для параметров: __construct ($ FD = 'рис') – jcsanyi

0

То же самое в Java, вам необходимо получить доступ к переменным класса с использованием «это» ключевое слово , В PHP, вы могли бы сделать что-то вроде:

$this->methodName(); 

или

$this->variableName 
+0

на самом деле в Java вас не нужно явно ссылаться на «это», это разница с PHP. –

+0

Большое вам спасибо –

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 
0

это ключевое слово используется для доступа к члену класса в текущем классе. Вы создаете класс, которому присвоено некоторое значение переменной $ food. , то в рамках функции, к которой вы пытались получить доступ к переменной, но $ food - это переменная класса, мы не можем получить доступ к членам класса без оператора с разрешением объекта или области. "this" имеет текущее имя объекта.

Смежные вопросы