Вопрос по примеру в PHP 5 на практике - PullRequest
1 голос
/ 13 июня 2009

Привет, я не понимаю, почему автор книги php использовал $ Диски = 1 в публичной функции __construct ($иск = 1)?

Я пытался заменить $ дисков = 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>';
?>

Ответы [ 2 ]

13 голосов
/ 13 июня 2009

Он устанавливает значение по умолчанию для $ дисков, поэтому, если вы создадите экземпляр класса без аргумента, для $ Диски будет установлено значение 1.

Пример:

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

f = new Foo('hi'); // prints 'hi'
f = new Foo(); // prints 'hello'
2 голосов
/ 13 июня 2009

Это называется по умолчанию. Если при вызове не будет установлено значение для $ disk, оно автоматически примет значение по умолчанию, в данном случае 1 *.

Однако, если вы измените метод на этот:

__construct($disks = 1, $somethingElse)

Это не сработает. Если вы укажете значение по умолчанию, то для следующих значений также должно быть значение по умолчанию. Еще интереснее, если вы сделали это:

__construct($somethingElse, $disks = 1)

Это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...