Uygulama PHP 5 bir örnek üzerinde bir soru

2 Cevap php

Bir php kitabın yazarı bir kamu fonksiyonu = 1 $ diskleri kullanılan neden HI, ben __ ($ diskler = 1) inşa anlamıyorum?

Ben sadece $ disklerle = 1 $ diskleri değiştirmek için çalıştı, o da çalıştı. Neden yapıyor yazar ki?

<?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 Cevap

O $ diskler için varsayılan bir değer belirliyor, böylece bir argüman olmadan sınıfı örneğini ise, $ diskler 1'e set edilecektir.

Örnek:

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

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

Bu varsayılan denir. Hiçbir değer onun adı $ diskler için ayarlanmış olursa, otomatik olarak bu durumda 1, varsayılan üstlenecek.

Ancak, bu yöntemi değiştirirseniz:

__construct($disks = 1, $somethingElse)

Bu işe yaramaz. Eğer varsayılan sağlarsanız, o zaman aşağıdaki değerleri de bir varsayılan olmalıdır. Hatta daha ilginç, bu olsaydı:

__construct($somethingElse, $disks = 1)

İşe olacaktır.