2009-06-12 5 views
1

HI, je ne comprends pas pourquoi l'auteur d'un livre php a utilisé $ disks = 1 dans une fonction publique __construct ($ disks = 1)?Une question sur un exemple en PHP 5 en pratique

J'ai essayé de remplacer $ disks = 1 par $ disques seulement, cela a également fonctionné. Pourquoi l'auteur ferait-il cela?

<?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>'; 
?> 

Répondre

13

Il fixe une valeur par défaut pour les disques $, donc si vous instancier la classe sans argument, les disques $ sera mis à 1.

Exemple:

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

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

Rien de plus à dire, sauf une référence: http://docs.php.net/manual/fr/functions.arguments.php –

2

Ce qu'on appelle un défaut. Si aucune valeur est paramétrée pour les disques $ quand elle est appelée, il prendra automatiquement la valeur par défaut, dans ce cas 1.

Cependant, si vous changez la méthode à ceci:

__construct($disks = 1, $somethingElse) 

Il n » t travail. Si vous indiquez une valeur par défaut, les valeurs suivantes doivent également avoir une valeur par défaut. Encore plus intéressant, si vous avez fait ceci:

__construct($somethingElse, $disks = 1) 

Cela fonctionnerait.