2011-06-17 6 views
0

「新しいオブジェクトを作成するときは、呼び出されるクラスに引数のリストを渡すことができます。これらは、コンストラクタと呼ばれるクラス内の特別なメソッドに渡され、さまざまなプロパティを初期化します。__constructorsと渡しについて:それらは何のためですか?両親について:彼らは兄弟とその逆の目的をとっていますか?

私は特にありません、この文脈で、本当に、されて「合格」のか分からない。私はまた、あなたがコンストラクタメソッドを使用する場合は


class User 
{ 
    function __constructor($param1, $param2) 
    { 
    echo "User construct." 
    } 
} 
user(); 
を持っている場合、それは、そう。クラスの名前を取ることを読んで

私のペーストビンは、それが意味するものであれば、「可能なCRF攻撃」だと言うことができないので、私は言うことができません....

は、我々は、コードが言う本の後のセクションに来て、右に沿って移動:


$bothCatsObject = new tiger(); 
echo "Tigers have...
"; echo "Fur: " . $bothCatObject->fur . "
"; echo "Stripes: " . $bothCatObject->stripes; class cat { public $fur; // Cats have fur. function __construct() { $this->fur = "TRUE"; } } class tiger extends Cats { public $stripes; // Tigers have stripes. function __construct() { parent::__construct(); // Call parent construct first. $this->stripes = "True"; } }

は、オブジェクトが呼び出されたときに、その構築物が活性化して設定することを示すために、このコードの第2ブロックのポイントですアクティブなメモリまたは何かのプロパティ?あるいは、プロパティが呼び出されたときに、プロパティの値がコンストラクタ内で設定されている場合は、値を持ちます。その値がコンストラクタ内で設定されていない場合(たとえば、非コンストラクタメソッド内で設定されている場合)、エラーが返されます。

本書では、「このコードは、一般的な方法でコンストラクタの継承の利点を利用しています。だから私はあまり遠くないと思っています。私はなぜコンストラクタが便利であるのだろうかと思っています。私の研究のこの時点でそれを知る必要がある場合、コンストラクタが必要なアプリケーションは何ですか?

最後に、この場合、「cats」クラスにオブジェクトが割り当てられることはありません。 "虎"は猫のクラスを拡張するので、猫のクラスは虎のオブジェクトを介して呼び出すことができますか?虎クラスは猫クラスに兄弟れているので、私は新しい猫のオブジェクトから「虎」クラスに組み込まれた関数を呼び出すことができ、これらの同じ線に沿って


$bothCatsObject = new tiger(); 
$bothCatsObject->catTest(); //Does this return an error? 

class cat 
{ 
    public $fur; // Cats have fur. 
    function __construct() 
    { 
    $this->fur = "TRUE"; 
    } 
    function catTest() 
    { 
    echo "The object works for cats and tigers." 
    } 
} 

class tiger extends Cats 
{ 
    public $stripes; // Tigers have stripes. 
    function __construct() 
    { 
    parent::__construct(); // Call parent construct first. 
    $this->stripes = "True"; 
    } 
    function tigerTest() 
    { 
    echo "The object works for tigers and cats." 
    } 
} 

:ここで私が何を意味するかの例ですか?言い換えれば、このコードの動作をライン1と前のコードブロックの2を交換するだろうか、それはエラーを返します:すべての

 
$bothCatsObject = new cat(); 
$bothCatsObject->tigerTest(); //Does this return an error? 

答えて

1

まず、ローカルコンピュータでスクリプトを実行します。

OK:

class User 
{ 
    function __constructor($param1, $param2) 
    { 
    echo "My Name is {$param1} {$param2} ;)"; 
    } 
} 

あなたはユーザークラスを初期化するとき、それは自動的に__construct機能を実行します:

$user = new User("John","Smith"); 
// this will output "My Name is John Smith ;)" 

コンストラクタは、クラスの新しいインスタンスを作成して、いつでも実行します。例: データベース接続を開始して重労働を起こしたいとしましょう。すでにdb接続があるかどうかを確認するコンストラクタを作成し、それを作成せずにすべてのデフォルト設定を処理するコンストラクタを書くことができます。

$database = new Database(); 
// will automatically create a connection 
// ex: mysql_connect("username","password",".... 
//  mysql_select_db(... 
// and so on 
+0

ああ。それは本当に素晴らしいです。今私はコンストラクタがなぜ有用かを見ることができます。デストラクタがどのように活性化され、どのように役立つのか尋ねてもいいですか?ありがとうございました。 –

+0

ローカルのスクリプトを実際に実行したいと思っていますが、何らかの管理上の問題があります。私はPHPをインストールすることを許さない様々な許可エラーを受け取ります。私はそれが私のOS言語の設定と関係があると思いますが、私は確信が持てません。私は再フォーマットを検討しています。 –

+0

スクリプトの最後にphpがデータベース接続を終了させるため、[Destructor](language.oop5.decon.destructor)の良い例は見つかりませんでした。しかし、あなたは前のリンクをもっと頼りにすることができます。 phpをインストールする際に問題がある場合は、alos。使用しているOSに応じて、Google LAMPまたはMAMPまたはWAMP ar XAMPを試してください。それは本当に簡単にインストールすることができます(freshmeat_apache/LinuxのApacheのMySQLのPHP)のためのプリパッケージ構成をしています。幸運 – Ibu

関連する問題