oophp, метод и наименование свойства - PullRequest
2 голосов
/ 20 декабря 2010

В php, есть ли разница между использованием

$myClass::method()

и

$myClass->method()

В чем причина изменения? (Я верю, что -> существует дольше.)

Я мог видеть смысл использования :: для методов и -> для свойств или наоборот.

Ответы [ 3 ]

6 голосов
/ 20 декабря 2010

:: - это оператор разрешения области, используемый для доступа к static членам классов.

-> - это оператор-член, используемый для доступа к членам объектов.

Вотпример:

class Car {
   public $mileage, $current_speed, $make, $model, $year;
   public function getCarInformation() {
      $output = 'Mileage: ' . $this->mileage;
      $output = 'Speed: ' . $this->current_speed;
      $output = 'Make: ' . $this->make;
      $output = 'Model: ' . $this->model;
      $output = 'Year: ' . $this->year;
      return $output; 
   }
}

class CarFactory {

    private static $numberOfCars = 0;

    public static function carCount() {
       return self::$numberOfCars;    
    }

    public static function createCar() {
       self::$numberOfCars++; 
       return new Car();
    }

}    

echo CarFactory::carCount(); //0

$car = CarFactory::createCar();

echo CarFactory::carCount(); //1

$car->year = 2010;
$car->mileage = 0;
$car->model = "Corvette";
$car->make = "Chevrolet";

echo $car->getCarInformation();
1 голос
/ 20 декабря 2010

Учтите это:

class testClass {
    var $test = 'test';

    function method() {
        echo $this->test;
    }
}

$test = new testClass();

$test->method();
testClass::method();

Вывод будет примерно таким:

тест

Неустранимая ошибка: использование $ this, когда не в контексте объекта в ... в строке 7

Это связано с тем, что :: выполняет статический вызов класса, тогда как -> используется для вызова методов или свойств определенного экземпляра класса.

Кстати, я не верю, что вы можете сделать $test::method(), потому что PHP выдаст вам ошибку разбора, подобную этой:

Ошибка разбора: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM в ... в строке 14

0 голосов
/ 20 декабря 2010

:: также используется внутри класса / объекта для вызова его родителя, например:

parent::__constructor();

Также, если он вызывается из объекта (поэтому не статически).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...