2009-06-12 16 views
1

こんにちは、私は、PHPの本の著者が公共の関数__construct($ disks = 1)で$ disks = 1を使った理由を理解していませんか?実際のPHP 5の例に関する質問

私は$ disks = 1を$ disksだけに置き換えようとしましたが、これもうまくいきました。なぜそれを作っているのだろう?

<?php 
// Define our class for Compact disks 
class cd { 
    // Declare variables (properties) 
    public $artist; 
    public $title; 
    protected $tracks; 
    private $disk_id; 

    // Declare the constructor 
    public function __construct() { 
     // Generate a random disk_id 
     $this->disk_id = sha1('cd' . time() . rand()); 
    } 

    // Create a method to return the disk_id, it can't be accessed directly 
    // since it is declared as private. 
    public function get_disk_id() { 
     return $this->disk_id; 
    } 
} 

// Now extend this and add multi-disk support 
class cd_album extends cd { 
    // Add a count for the number of disks: 
    protected $num_disks; 

    // A constructor that allows for the number of disks to be provided 
    public function __construct($disks = 1) { 
     $this->num_disks = $disks; 

     // Now force the parent's constructor to still run as well 
     // to create the disk id 
     parent::__construct(); 
    } 

    // Create a function that returns a true or false for whether this 
    // is a multicd set or not? 
    public function is_multi_cd() { 
     return ($this->num_disks > 1) ? true : false; 
    } 
} 

// Instantiate an object of class 'cd_album'. Make it a 3 disk set. 
$mydisk = new cd_album(3); 

// Now use the provided function to retrieve, and display, the id 
echo '<p>The compact disk ID is: ', $mydisk->get_disk_id(), '</p>'; 

// Use the provided function to check if this is a a multi-cd set. 
echo '<p>Is this a multi cd? ', ($mydisk->is_multi_cd()) ? 'Yes' : 'No', '</p>'; 
?> 

答えて

13

彼は$ディスクのデフォルト値を設定しているので、あなたは、引数なしでクラスをインスタンス化した場合、$ディスクが1に設定されます

例:と呼ばれています

class Foo { 
    function __construct($var = 'hello') { 
     print $var; 
    } 
} 

f = new Foo('hi'); // prints 'hi' 
f = new Foo(); // prints 'hello' 
+0

参考までに何も言及しません。http://docs.php.net/manual/en/functions.arguments.php –

2

デフォルトです。

__construct($disks = 1, $somethingElse) 

「これはwouldn:何の値が呼び出されたときに$ディスクのために設定することが起こらない場合は、これにメソッドを変更した場合、それは自動的に、1

しかし、この場合には、デフォルトを想定します仕事。デフォルトを指定する場合は、次の値にもデフォルト値を設定する必要があります。さらに興味深いことに、あなたがこれをした場合:

__construct($somethingElse, $disks = 1) 

それはうまくいくでしょう。