Ερώτηση για Classes

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
dpa
Δημοσιεύσεις: 631
Εγγραφή: 29 Μαρ 2008 13:55

Ερώτηση για Classes

Δημοσίευση από dpa » 08 Φεβ 2017 13:51

Παιδιά ξέρει κανείς τι διαφορά έχει αυτό:

return $this->$name;
με το:

return $this->name;

Το βλέπουμε μέσα σε classes

Με το δεύτερο παίρνουμε την τιμή της μεταβλητής name

Το πρώτο τι κάνει ??

Το είδα σε class του wordpress

Κώδικας: Επιλογή όλων

	public function __get( $name ) {
		if ( in_array( $name, $this->compat_fields ) ) {
			return $this->$name;
		}
	}

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ερώτηση για Classes

Δημοσίευση από gvre » 08 Φεβ 2017 16:09

Επιστρέφει την τιμή που έχει το property $name του instance, όταν αυτό έχει δηλωθεί στο array compat_fields, κάνοντας χρήση των magic methods της PHP. Με τον παρακάτω κώδικα θα το καταλάβεις καλύτερα.

Κώδικας: Επιλογή όλων

class Obj
{
    private $foo = 'foo';
    private $bar = 'bar';
    private $baz = 'baz';

    private $compat_fields = [ 'foo', 'bar' ];

    public function __get( $name ) {
      if ( in_array( $name, $this->compat_fields ) ) {
         return $this->$name;
      }
   }
}

$obj = new Obj;
echo $obj->foo . "\n";
echo $obj->bar . "\n";
echo $obj->baz . "\n";
Υ.Γ. Ο κώδικας του WP δεν είναι ό,τι καλύτερο υπάρχει, οπότε αν θέλεις να μάθεις καλές πρακτικές θα πρέπει να κοιτάξεις αλλού.

dpa
Δημοσιεύσεις: 631
Εγγραφή: 29 Μαρ 2008 13:55

Ερώτηση για Classes

Δημοσίευση από dpa » 08 Φεβ 2017 20:15

Φίλε ευχαριστώ για την απάντησή σου.

Συμφωνώ για το wordpress. Απλά έχει ένας πελάτης μου και μελετάω λίγο τον κώδικα είναι πολύ μπέρδεμα και θέλει να του προσθέσω κομμάτια στο theme.

Εγώ έχω φτιάξει δικό μου CMS, αλλά θέλει αυτό που έχει.

Να σου πω λίγο πιο τρέχει πρώτα η __get ή __set()

Γιατί βρήκα ένα παράδειγμα που κάνει το παρακάτω

Κώδικας: Επιλογή όλων

    
public function __set($name, $value)
    {
        echo "Setting '$name' to '$value'\n";
        $this->data[$name] = $value;
    }

    public function __get($name)
    {
        echo "Getting '$name'\n";
// εδώ ψάχνει να βρει το κλειδί στο array αν το βρει επιστρέφει true 
// το θέμα είναι αφού επιστρέφει true πάει να πει ότι το βρήκε και μας επιστρέφει την τιμή του με το return σωστά ?
// Αφού το βρήκε η __set() λογικά τρέχει πριν την __get 
// κάνω λάθος ???
        if  (array_key_exists($name, $this->data) ) {
            return $this->data[$name];
        }

        
    }

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ερώτηση για Classes

Δημοσίευση από gvre » 08 Φεβ 2017 20:51

Δεν υπάρχει συγκεκριμένη σειρά που τρέχουν, καθώς κάνουν 2 διαφορετικά πράγματα. Για περισσότερα, δες το http://php.net/manual/en/language.oop5.overloading.php

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες