oophp,方法和属性命名

时间:2010-12-19 23:59:19

标签: php oop naming-conventions

在php中,使用

之间有什么区别
$myClass::method()

$myClass->method()

改变的原因是什么? (我相信->已经存在了很长时间。)

我可以看到方法使用::,属性使用->,反之亦然。

3 个答案:

答案 0 :(得分:6)

::是范围解析运算符,用于访问类的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 :(得分:1)

考虑一下:

class testClass {
    var $test = 'test';

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

$test = new testClass();

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

输出类似于:

  

测试

     

致命错误:当不在第7行的对象上下文中时使用$ this

这是因为::对类进行静态调用,而->用于调用类的特定实例上的方法或属性。

顺便说一句,我不相信你可以做$test::method(),因为PHP会给你一个这样的解析错误:

  

解析错误:语法错误,第14行的意外T_PAAMAYIM_NEKUDOTAYIM

答案 2 :(得分:0)

::也在类/对象中用于调用其父对象,例如:

parent::__constructor();

此外,如果它是从一个对象中调用的(所以不是静态的)。