Η εντολή use και οι χώροι ονομάτων στην αντικειμενοστρεφή προγραμματισμό στην PHP
Ας υποθέσουμε ότι έχουμε την ακόλουθη κλάση Data:
<?php
namespace \Core\Admin;
class Data
{
public function __construct($num)
{
}
}
?>
Ας υποθέσουμε επίσης ότι υπάρχει μια κλάση Page, που δημιουργεί
μέσα σε αυτήν αντικείμενα της κλάσης Data:
<?php
namespace Users;
class Page
{
public function __construct()
{
$data1 = new \Core\Admin\Data('1');
$data2 = new \Core\Admin\Data('2');
}
}
?>
Όπως βλέπετε, και οι δύο κλάσεις μας βρίσκονται
σε εντελώς διαφορετικούς χώρους ονομάτων, επομένως
οι κλήσεις της κλάσης Data δεν μπορούν να απλοποιηθούν,
όπως ακριβώς κάναμε στο προηγούμενο
μάθημα. Ωστόσο, αυτές οι κλήσεις είναι πολύ μεγάλες
και άβολες, αφού σε κάθε κλήση της κλάσης
Data πρέπει να καθορίζουμε τον μεγάλο του
χώρο ονομάτων.
Για την επίλυση ενός τέτοιου προβλήματος υπάρχει
μια ειδική εντολή use. Με τη βοήθεια
αυτής της εντολής αρκεί να συνδεθεί μια φορά
η κλάση με το πλήρες όνομά της, και μετά από αυτό
μπορούμε να αναφερθούμε σε αυτήν την κλάση απλά
με το όνομα της κλάσης. Δείτε το παράδειγμα:
<?php
namespace Users;
use \Core\Admin\Data; // συνδέουμε την κλάση
class Page extends Controller
{
public function __construct()
{
$data1 = new Data('1'); // καλούμε απλά με το όνομα
$data2 = new Data('2'); // καλούμε απλά με το όνομα
}
}
?>
Απλοποιήστε τον ακόλουθο κώδικα χρησιμοποιώντας
την use:
<?php
namespace Project;
class Test
{
public function __construct()
{
// Δημιουργούμε 3 αντικείμενα μιας κλάσης:
$data1 = new \Core\Users\Data('user1');
$data2 = new \Core\Users\Data('user3');
$data3 = new \Core\Users\Data('user3');
}
}
?>
Δίνονται οι ακόλουθες κλάσεις:
<?php
namespace Core\Admin;
class Controller
{
}
?>
<?php
namespace Users;
class Page extends \Core\Admin\Controller
{
}
?>
Απλοποιήστε τον κώδικα κληρονομικότητας της κλάσης, εφαρμόζοντας
την εντολή use.