Bonjour,

je suis le tuto sur la POO et j’avais quelques questions' dans l’imédia une !

sur cette video a 23mn04s

pourquoi ne pas fair plustot

class Article{
    public $url;
    public function getURL(){
        $this->url = 'index.php?p=article&id='.$this->id;
    }
}

Merci de vos conseils

9 réponses


tleb
Réponse acceptée

get signie recevoir, prendre. Ta méthode ne renvoit rien (null).

Genki
Réponse acceptée

Ca revient au même au final, vu que pour avoir le résultat tu devrais faire un

return $this->url

Donc.. ^^

tleb
Réponse acceptée
// Tu ferais ceci
class Article
{
    public $url;

    public function getURL()
    {
        $this->url = 'index.php?p=article&id=' . $this->id;
        return $this->url;
    }
}

// à la place de celà ?
class Article
{
    public function getURL()
    {
        return 'index.php?p=article&id=' . $this->id;
    }
}

// Pourquoi ? Tu fais la concaténation à chaque fois de toute façon.
clementp
Auteur
Réponse acceptée

exatement Forever

de cette facon je l'appelerais

$post->getURL 
// plustot que
$post->getURL() 

mais après peut être qu'il y a une raison d'appel une "fonction" plustôt qu'une variable.

comme ca le getURL ce retrouve en plus dans l'instance lors d'un var_dump et on ce rend mieux compte des possibilité d'info que l'on peut écrire.

tleb
Réponse acceptée
$post->getURL
// te retournera une erreur parce que l'objet n'a pas de propriété qui s'appelle `getURL`, c'est `url`

Dans mon premier exemple, il faudra faire un $post->getURL() avant de pouvoir faire $post->url parce que url n'est set à rien (null).

Bref, le plus simple : utiliser une méthode.

Ce que tu peux faire si tu souhaites utiliser la syntaxe $post->url et $post->url = 'foo' est d'utiliser les méthodes magiques __get et __set pour appeller les méthodes getX et setX quand x est appelé.

clementp
Auteur
Réponse acceptée

Merci pour le presition Virax
Pradon Forever je voulais dire

$post->url 
// plustot que
$post->getURL() 

En fait ce que je voie c’est que si je fait un var_dump($post) je n’ai pas url dedans et si ca fait un moment que je n’ai pas toucher au code je peut avoir oublier les données au quel je m’etais donnée accée.

avec

public $url;
public function getURL(){
    $this->url = 'index.php?p=article&id=' . $this->id;
    return $this->url;
}

la je me rend compte que le var_dump($post) m’affiche bien url (et donc tout les donnée diponible sans aller chercher dans les class ce que je pourais avoir crée comme getters).

je ne connais pas encore les methodes magic ...

apres c’est peut etre une conneri et que la je ne me rend pas encore compte, et que je regraiterai plus tard d’avoir de vrais getters.

clementp
Auteur
Réponse acceptée

haaa ba pardon, il en parle dans la suite du tuto des methode magic !!

clementp
Auteur

pour finir j’ait fait ceci

<?php

class membres {

    public $url ;

    public function __construct(){

        $this->url = $this->getUrl() ;

    }

    public function getURL(){

        return ROOT . '/membres-'.$this->id.'/'.$this->nom.'-'.$this->prenom;

    }

}

si ca fait un moment que je n’ai pas toucher au code je peut avoir oublier les données au quel je m’etais donnée accée

Les commentaires sont là pour ça. Les docblocks en particulier (il me semble que Graf' en parle dans ce tuto).