2010-12-19 3 views
2

を命名メソッドとプロパティは、変更の理由は何ですか?oophp、PHPで

$myClass::method() 

$myClass->method() 

を使用しての間に違いがありますか(私は->が長かったと信じています)

メソッドの場合は::、プロパティの場合は->を使用しています。

+0

はこちらを参照:http://stackoverflow.com/q/4361598/50079 – Jon

答えて

6

::は、スコープ解決演算子で、クラスのメンバーstaticにアクセスするために使用されます。

->は、オブジェクトのアクセスメンバーに使用されるメンバー演算子です。ここで

は例です:それはそうではない静的(オブジェクト内から呼ばれていた場合も

parent::__constructor(); 

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

あなたは違いを表示するために非静的メソッドを追加する必要があります – pastjean

+1

PHPはPaamayim Nekudotayimと呼んでいます。これはもっと自然なものです=) – Rudie

+0

ああ、ありがとう。今、静的なクラスを気にするよい理由はありますか? – Teson

0

::はその親、例えばを呼び出すために、クラス/オブジェクト内でも使用されています)。

class testClass { 
    var $test = 'test'; 

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

$test = new testClass(); 

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

出力がされるようなもの:

1

はこのことを考えてみましょう

test

Fatal error: Using $this when not in object context in ... on line 7

::が上のメソッドやプロパティを呼び出すために使用されている->ながら、クラスに静的呼び出しを行うためですクラスの特定のインスタンス。

ちなみに、私はPHPはあなたにこのようなパースエラーを与えるので、あなたが$test::method()を行うことができると信じていない:

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in ... on line 14

+0

実際、 '$ this :: method();'はPHP5.3以降で動作します。 (ほとんどの共有ホスティングサーバーには関係ありません) – mario

+0

@marioチップをありがとう。私はideone.comでこれを試してみたので、私はエラーが発生しました。 – treeface