2016-04-09 13 views
1

私はPHPでシーケンシャルIDを生成したい:EmployeeID、CustomerIDなど。私たちはPythonの 'static'変数を使用して、最後の増分の値PHPでやりたいことと同じです。どのように可能ですか?私は、PHPで 'STATIC'キーワードがJavaとまったく同じ用途を持っていないことがわかりました。私はPHPで同じことをしたいPHPでシーケンシャルIDを生成したいが、ランダムではない。

class DemoClass{ 
    private static int counter=1000; 
    public DemoClass(){ 
    System.out.println("Object: " + ++this.counter); 
    } 
} 
public class Demo { 
    public static void main(String args[]){ 
    DemoClass a = new DemoClass(); 
    DemoClass b = new DemoClass(); 
    DemoClass c = new DemoClass(); 
    } 
} 

は、ここに私のJavaコードです。以下は私が間違っているコードです。私は多くを検索したが、この問題に適切な解決策を見つけるのを助けてください。ここで

は私のPHPコードです:

class Employee{ 
private $name, $address; 
private $empid; 
private STATIC $counter = 1000; 

public function __construct($name, $address) { 
    $this->name = $name; 
    $this->address = $address; 
    $this->empid = ++$this->counter; 
} 
public function displayDetail() { 
    echo "Employee Name: " . $this->name."<br>"; 
    echo "Employee Address: " . $this->address."<br>"; 
    echo "Employee ID: " . $this->empid; 
    } 
} 

$emp = new Employee("Indranil Das", "421-Nabapally"); 
$emp1 = new Employee("Ronty Das", "422-Nabapally"); 
$emp->displayDetail(); 
$emp1->displayDetail(); 

このコードは、私が何を望むかの結果を与えていません。 documentationから

+0

http://php.net/manual/en/language.oop5.static.php – Niloct

+0

ここでSTATICを削除してください: 'private $ counter = 1000;' –

答えて

2

PHPでは、オブジェクトコンテキストのクラスプロパティstaticにアクセスすることはできません。 $thisの代わりにselfまたはstaticキーワード、または->の代わりに::演算子を組み合わせたクラス名を使用する必要があります。次のいずれかに

$this->empid = ++$this->counter; 

だから、あなたの例では、この行を変更するだけで十分です

$this->empid = ++self::$counter; 
$this->empid = ++static::$counter; 
$this->empid = ++Employee::$counter; 

self

は現在のクラスのプロパティを参照します。 staticは、プロパティ/メソッドが定義された階層の最初のクラスを参照します。クラス名は特定のクラスを指します。

あなたのケースではすべて同じように動作しますが、この例では最も簡単なのでselfが私の選択です。

静的なプロパティとメソッドについて詳しくは、docsをご覧ください。

+0

ありがとう。実際には私はPHPで新しいです。これは私のために働く。 –

0

静的プロパティは、矢印演算子を使用してオブジェクトを介してアクセスすることができません - >。

あなたは変数にアクセスする

Employee::counter 

をやってみることができます。

関連する問題