Блог веб разработки

Блог веб-разработки статьи | видеообзоры | исходный код

Пространство имен php

Всем привет! До появления PHP 5.3 разработчики вынуждены были подбирать для функций и классов уникальные имена, так при их объявлении они были доступны во всем приложении. Однако проблема еще состояла в том что все чаще в проектах использовался библиотечный код, что сильно увеличивало зависимости от имен классов и функций.

Давайте рассмотрим следующий пример:

У нас есть два файла:

//Файл  index.php

require_once('child.php');

class main{

    public $name = 'main';

    function __construct(){
        echo $this->name;
    }
}

 //Файл   child.php

class main{

    public $name = 'child';

    function __construct(){
        echo $this->name;
    }
}

При запуске файла index.php у нас возникнет фатальная ошибка, так как в подключаемом файле child.php определен класс с тем же названием.

Теперь давайте рассмотрим тот же пример, но с использованием пространства имен.

Скопировать в буфер

//Файл  index.php
namespace index;
require_once('child.php');
class main{

    public $name = 'main';

    function __construct(){
        echo $this->name;
    }
}

//Файл   child.php
namespace child;

class main{

    public $name = 'child';

    function __construct(){
        echo $this->name;
    }
}

Как видите для того чтобы установить пространство имен мы в самом начале файлов указали ключевое слово namespace и дали название пространству времен. Теперь в каждом файле определен свой собственный класс main и нет никаких конфликтов.

Теперь давайте попробуем создать экземпляры классов main в каждом файле и обратится к index.php

namespace index;
require_once('child.php');

class main{

public $name = 'main';

    function __construct(){
        echo $this->name;
    }
}
echo "<br/>";
$main = new main();

namespace child;
class main{

    public $name = 'child';

    function __construct(){
        echo $this->name;
    }
}
$main = new main();

Как видите сначала у нас создался экземпляр класса main в фалйле child.php, так как он подключается выше, а затем index.php. Но что если нам необходимо к примеру в файле index.php вызвать функцию которая определена в файле child.php

//index.php
namespace index;
require_once('child.php');

class main{

public $name = 'main';

    function __construct(){
        echo $this->name;
    }
}
echo "<br/>";
$main = new main();
myFunction();

//child.php

namespace child;
class main{

    public $name = 'child';

    function __construct(){
        echo $this->name;
    }
}
$main = new main();

function myFunction(){
    echo 'Функция';
}

В этом случае произойдет ошибка. Так как в пространстве имен index функция myFunction не определена. Для того чтобы обратится к функции myFunction в index.php

namespace child;
class main{

    public $name = 'child';

    function __construct(){
        echo $this->name;
    }


}


function myFunction(){
    echo "<br/>";
echo 'Функция';
}
namespace index;
use child as myFun;
require_once('child.php');

class main{

public $name = 'main';

    function __construct(){
        echo $this->name;
    }
}
echo "<br/>";
$main = new main();

myFun\myFunction();

Как видите мы успешно смогли вызвать функцию myFunction в контексте файла index.php что же мы сделали?

Во первых мы через ключевое слово use обратились к пространству времен child и через ключевое слово as присвоили псевдоним. Теперь используя псевдоним в нашем случае это myFun мы можем спокойно обращаться к пространству времен child и вызывать из него любые функции классы и методы , не создавая при этом никаких конфликтов имен.

Как видите для того чтобы вызвать функцию myFunction мы указали в начале псевдоним, затем через обратный слэш имя название функции. Мы также можем беспрепятственно обращаться к методам класса main в файле child.php

namespace child;
class main{

    public $name = 'child';

    function __construct(){
        echo $this->name;
    }
public function myMethod(){
        echo "<br/>";
        echo 'Метод класса main в файле child.php';
}

}


function myFunction(){
    echo "<br/>";
echo 'Функция';
}
namespace index;
use child as myFun;
require_once('child.php');

class main{

public $name = 'main';

    function __construct(){
        echo $this->name;
    }
}
echo "<br/>";
$main = new main();

myFun\myFunction();
myFun\main::myMethod();

Как видите мы указываем псевдоним и через обратный слэш название класса и его метод.

Все довольно просто. Вот в общем и все дорогие друзья, надеюсь вам было интересно и вы узнали что то новое, а так всем спасибо за внимание. Удачи!

Оцените статью

Еще статьи

localstorage HTML

курсор CSS

CSS media screen

Три полезных метода для работы с объектами в javaScript

media Javascript

clip css

shelve python

Комментарии

OlgaDub

Я считаю, что Вы ошибаетесь. Могу это доказать. --- будем посмотреть скачать игру фифа 15 торрент пк, скачать fifa 15 xbox 360 lt 3.0 или <a href=http://15fifa.ru/>официальный сайт fifa</a> fifa 15 freeboot скачать торрент

16:41 30-08-2019

DarjaDub

Какой любопытный вопрос --- баян! скачать fifa 15 рутор, fifa 15 android скачать а также <a href=http://15fifa.ru/raznoe-fifa-15/32-zvuk-fifa-15-mezhdunarodnye-kommentatory-skachat.html>скачать английский комментатор для fifa 15</a> моды для fifa 15 фнл скачать

15:00 24-08-2019

KristinaDub

Я извиняюсь, но, по-моему, Вы не правы. Я уверен. Пишите мне в PM. --- Вы не правы. Могу отстоять свою позицию. скачать fts 15 mod fifa 17, fifa 15 скачать pc repack механики а также <a href=http://15fifa.ru/skachat-fifa-15/>скачать fifa 15 прямой ссылкой</a> скачать fifa 15 на xbox 360

10:09 15-08-2019

DarjaDub

Извините, я подумал и удалил сообщение --- Бесподобный топик, мне интересно )))) fifasetup fifa 15 скачать, fifa 15 ultimate team на андроид скачать и <a href=http://15fifa.ru/skachat-kljuchi-fifa-15/33-skachat-fifa-15-crack-kryak-tabletka-klyuch-besplatno.html>скачать crack fifa 15</a> скачать через торрент fifa 15 moddingway

20:28 10-08-2019

MarijaDub

Я считаю, что Вы ошибаетесь. Давайте обсудим. Пишите мне в PM, поговорим. --- Только посмейте еще раз сделать это! fifa 15 скачать на windows 7, fifa 15 скачать последние составы и <a href=http://15fifa.ru/skachat-fifa-15/28-fifa-15-ultimate-team-by-ea-sports-v107-sportivnyy-simulyator-ios-511-rus.html>скачать fifa 15 на ios</a> скачать лиги для fifa 15

22:54 03-08-2019

История

    НОВОСТИ

    • Опубликовал приложение под android 'Аудиокниги'. Кому интересно, переходите по ссылке