Imenski prostori v OOP v PHP

Recimo, da imamo zdaj bolj zapleteno situacijo: za administratorja moramo narediti dva razreda Page - enega s podatki strani in drugega - s prikazom tih podatkov. Naj bo prvi razred v datoteki /admin/data/page.php, drugi pa - v datoteki /admin/view/page.php.

V prejšnjih lekcijah smo se že odločili, da bodo vsi razredi iz mape admin pripadali imenskemu prostoru Admin. Vendar imamo zdaj v tem istem prostoru konflikt dveh razredov. Za rešitev problema lahko naredimo dodatne imenske prostore. Na primer, lahko naredimo imenski prostor Admin, v njem pa podprostora Data in View. V tem primeru se imena teh podprostorov preprosto zapišejo z obratno poševnico - tako pri določanju imenskega prostora kot pri ustvarjanju objekta razreda.

Tukaj je treba pojasniti, da raven gnezdenja podprostorov ni omejena (lahko ustvarjate podpodprostore v podprostorih in tako naprej).

Torej, dokončajmo naš zgoraj opisani primer. Za razred Page iz datoteke /admin/data/page.php navedimo imenski prostor Admin\Data:

/admin/data/page.php<?php
  namespace Admin\Data;
  
  class Page
  {
    
  }
?>

Za razred Page iz datoteke /admin/view/page.php navedimo imenski prostor Admin\View:

/admin/view/page.php<?php
  namespace Admin\View;
  
  class Page
  {
    
  }
?>

Ustvarimo objekte naših razredov:

/index.php<?php
  require_once '/admin/data/page.php';
  require_once '/admin/view/page.php';
  
  $adminDataPage = new \Admin\Data\Page;
  $adminViewPage = new \Admin\View\Page;
?>
Задание 1

Recimo, da imate mapo modules/cart. Poskrbite, da bodo vsi razredi iz te mape pripadali imenskemu prostoru Modules\Cart.

Задание 2

Recimo, da imate mapo modules/shop/cart/. Poskrbite, da bodo vsi razredi iz te mape pripadali imenskemu prostoru Modules\Shop\Cart.