关于PHP 5实践中的一个例子的问题

Dea*_*ean 1 php class object

嗨,我不明白为什么一本php书的作者在公共函数中使用$ disks = 1 __construct($ disks = 1)?

我试图用$ disks替换$ disks = 1,它也有效.作者为什么这样做?

<?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>';
?>
Run Code Online (Sandbox Code Playgroud)

clo*_*ead 13

他正在设置$ disks的默认值,因此如果您实例化没有参数的类,$ disks将设置为1.

例:

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

f = new Foo('hi'); // prints 'hi'
f = new Foo(); // prints 'hello'
Run Code Online (Sandbox Code Playgroud)