Εγγραφή ιδιοτήτων μέσω μαγείας στην ΑΑΠ στην PHP
Η μαγική μέθοδος __set καλείται
όταν γίνεται προσπάθεια αλλαγής της τιμής μιας
μη υπάρχουσας ή κρυφής ιδιότητας. Ως παραμέτρους
δέχεται το όνομα της ιδιότητας και την τιμή, που
προσπαθούν να της ανατεθούν.
Ας δούμε ένα πρακτικό παράδειγμα.
Ας υποθέσουμε ότι μας δίνεται η ακόλουθη κλάση Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Ας φτιάξουμε σε αυτήν την κλάση τη μαγική
μέθοδο __set, που με τη βοήθεια της συνάρτησης
var_dump θα εμφανίζει το όνομα της ιδιότητας,
προς την οποία έγινε πρόσβαση, και την τιμή,
που προσπαθούν να ορίσουν σε αυτήν την ιδιότητα:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Ας ελέγξουμε τη λειτουργία της κλάσης μας:
<?php
$test = new Test;
$test->prop = 'value'; // το var_dump της μεθόδου __set θα εμφανίσει 'prop value'
?>
Ας ορίζουμε τώρα τιμή
στην ιδιότητα, το όνομα της οποίας αποθηκεύεται στη μεταβλητή
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // ορίζουμε την τιμή
}
}
?>
Τώρα μπορούμε να γράφουμε σε ιδιωτικές ιδιότητες από έξω από την κλάση:
<?php
$test = new Test;
$test->prop1 = 1; // θα γράψουμε 1
$test->prop2 = 2; // θα γράψουμε 2
?>
Μπορούμε να γράψουμε, ωστόσο, να ελέγξουμε αν γράφτηκε κάτι εκεί - όχι, αφού οι ιδιότητες είναι ιδιωτικές.
Μπορούμε να φτιάξουμε έναν getter για αυτές τις ιδιότητες ή
απλά να χρησιμοποιήσουμε τη μαγική μέθοδο
__get. Ας χρησιμοποιήσουμε τη δεύτερη επιλογή:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Μαγικός getter ιδιοτήτων:
public function __get($property)
{
return $this->$property;
}
}
?>
Τώρα μπορούμε να ελέγξουμε τη λειτουργία της κλάσης μας. Ας ελέγξουμε:
<?php
$test = new Test;
$test->prop1 = 1; // θα γράψουμε 1
$test->prop2 = 2; // θα γράψουμε 2
echo $test->prop1; // θα εμφανίσει 1
echo $test->prop2; // θα εμφανίσει 2
?>
Στην πραγματικότητα, φυσικά, δεν πρέπει να επιτρέπουμε σε όλους χωρίς διάκριση να γράφουν σε ιδιωτικές ιδιότητες, διαφορετικά χάνεται το νόημα αυτών των ιδιωτικών ιδιοτήτων (είναι πιο εύκολο να τις κάνουμε δημόσιες και τέλος).
Επομένως, αυτή η μέθοδος πρέπει να εφαρμόζεται μόνο όταν πραγματικά υπάρχει ανάγκη. Στα επόμενα μαθήματα θα δούμε και άλλα παραδείγματα επιτυχημένης εφαρμογής της.