Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как объявить класс в необходимом пространстве имен, без указания в добавл. классе пр. имен. 
V
    Опции темы
numerovan
Дата 16.4.2016, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



можно ли как-то сделать следующее:
добавляю/объявляю в программе подключаемый класс при этом он помещается в определенную, выбранную мною, пространство имени ... и что самое главное в файле где происходит описание класса не подставляется слово namespace.

Подключение классов, как знаем, происходит с помощью spl_autoload_register() ... в общем добавляем класс в нужное пространство имен, а сам подключаемый файл имеет вид:
Код

<?
class Main extends Controller{ // без namespace и без указания пр. имени в Controller, хотя этот контроллер может находится в каком нибудь пространстве.
    public function index(){
        
    }
}
?>

PM MAIL   Вверх
_zorn_
Дата 16.4.2016, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Код

<?php
namespace OLOLO

$className = $_GET['c'] == 'CLASS' ? 'A' : 'B';
require __DIR__ . '/classes/'.$className.'.php'

Выше еще один файл который неймспейсы разруливает...

Вопрос "зачем" задавать бесмысленно ?

PM MAIL   Вверх
ksnk
Дата 16.4.2016, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Цитата(numerovan @  16.4.2016,  08:58 Найти цитируемый пост)
самое главное в файле где происходит описание класса не подставляется слово namespace

Каким образом в главной программе до этого класса добираются? Зачем вообще такое нужно?

Пространство имен - очень простая штука. В каком-то пространстве имен ко всем определяемым классам и дефайнам автоматически приписывается префикс.
Чтобы из другого места добраться до класса в другом пространстве имен - его нужно ЯВНО указать. При это можно пользоваться use, алиасами, но нужный неймспейс должен быть указан.

Класс, в файле с описанием которого не указан неймспейс, может попасть только в глобальное пространство имен.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
_zorn_
Дата 16.4.2016, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(ksnk @  16.4.2016,  19:08 Найти цитируемый пост)
Класс, в файле с описанием которого не указан неймспейс, может попасть только в глобальное пространство имен.

А как же use или полное указание класса (типа new \Namespace\Package\Subdir\Class()) ? Я понял что вы хотели сказать, но выразились не правильно. Не "может попасть", а "находится в".

А вообще я пользуюсь композерским автолоадером. Очень удобно - пару строчек в composer.json и структура директорий повторяет неймспейсы АВТОМАТИЧЕСКИ.

Это сообщение отредактировал(а) _zorn_ - 16.4.2016, 12:38
PM MAIL   Вверх
ksnk
Дата 16.4.2016, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



_zorn_,  словосочетание `может попасть ТОЛЬКО`, imho и означает `находится в`. Нет?

Цитата(_zorn_ @  16.4.2016,  12:33 Найти цитируемый пост)
А как же use или полное указание класса (типа new \Namespace\Package\Subdir\Class()) ?

Ok. Есть файл

Код

<?php

class XX {}

$xx = new XX;

echo get_class($xx);


Какие слова, кроме nаmespace можно написать между описанием класса и первой строкой, чтобы в результате был НЕ `xx`? Как можно изменить описание класса, чтобы получился класс с namespace?

Это сообщение отредактировал(а) ksnk - 16.4.2016, 14:53


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
_zorn_
Дата 16.4.2016, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(ksnk @  16.4.2016,  21:45 Найти цитируемый пост)
_zorn_,  словосочетание `может попасть ТОЛЬКО`, imho и означает `находится в`. Нет?

"Может попасть только в" можно воспринять как "ограниченная область видимости"

Но согласен это я к словам придираюсь smile

Это сообщение отредактировал(а) _zorn_ - 16.4.2016, 15:06
PM MAIL   Вверх
numerovan
Дата 16.4.2016, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Кстати, для чего такое мне, я в плане темы?
Так сказать фреймворк свой делаю. Мне вот нужно чтоб подключаемые пользовательские классы не конфликтовали с теми классами что уже определены,
поэтому пользовательские классы хочится помещать в свою пространство имен.
Вид на подобие: class Settings_step1_step2_step3{} - не очень как-то красиво, хотелось бы одним словом, например так: class Settings{}
При этом так же бы не хотелось во все пользовательские классы сверху дописывать пространство имен:
Код

namespace MySpace

class Settings{}

Представьте подключаемых файлов штук 20 или 50, то на каждый прописывать пространство предка, то как-то не очень смотрится:
Код

class Seittings exends \step1\step2\Set{}


Поэтому и к чему веду, чтоб как-то более красиво было, без лишних слов на добавляемые классы
Код

<?
class Settings extends Parent{}
?>


Это сообщение отредактировал(а) numerovan - 16.4.2016, 18:24
PM MAIL   Вверх
ksnk
Дата 16.4.2016, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Совсем без изменений исходников - никак. 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
numerovan
Дата 17.4.2016, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Цитата(_zorn_ @  16.4.2016,  12:05 Найти цитируемый пост)
<?php
namespace OLOLO
$className = $_GET['c'] == 'CLASS' ? 'A' : 'B';
require __DIR__ . '/classes/'.$className.'.php'


Вот это не сработало, класс объявился, но в глобальном пространстве.

Сейчас сижу понимаю что нужно как-то сделать чтоб котроллеры грузились в одно прсотонаство, модели в другое, при этом в файлах котроллеров и моделей не было лишних объявлений (namespace, \scope1\Class)
PM MAIL   Вверх
ksnk
Дата 17.4.2016, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Какое слово в словосочетании `никак` остается непонятным?  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
_zorn_
Дата 26.4.2016, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(numerovan @  17.4.2016,  01:17 Найти цитируемый пост)
Так сказать фреймворк свой делаю.

БРОСАЙ эту затею.
Умные люди все до тебя придумали. И все удобно. И не конфликтуют.
Фабьен красава по части ПХП.

Объясню простую вещь - придумашь ты что нибудь... Чтобы ВСЕМ пользоваться этим ТВОИМ нужно вникать и разбираться.
Правильно ?

С чем проще разобраться с тем к чему ДОКУМЕНТАЦИЯ вся лежит и дожидается и куча народу знает как решить "проблему" или с твоим "фреймворком" в котором НИКТО не разбирается ?

Ты же не готов поддерживать ДОКУМЕНТАЦИЮ в актуальном состоянии ?  smile 
PM MAIL   Вверх
numerovan
Дата 17.2.2017, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Идея да херовая оказывается была. Конечно нужны свои пространства имен, в общем придерживать как на популярных фреймворках сделано.
PM MAIL   Вверх
Zhenek
Дата 17.2.2017, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



Цитата(_zorn_ @ 27.4.2016,  00:53)
Цитата(numerovan @  17.4.2016,  01:17 Найти цитируемый пост)
Так сказать фреймворк свой делаю.

БРОСАЙ эту затею.
Умные люди все до тебя придумали. И все удобно. И не конфликтуют.
Фабьен красава по части ПХП.

Объясню простую вещь - придумашь ты что нибудь... Чтобы ВСЕМ пользоваться этим ТВОИМ нужно вникать и разбираться.
Правильно ?

С чем проще разобраться с тем к чему ДОКУМЕНТАЦИЯ вся лежит и дожидается и куча народу знает как решить "проблему" или с твоим "фреймворком" в котором НИКТО не разбирается ?

Ты же не готов поддерживать ДОКУМЕНТАЦИЮ в актуальном состоянии ?  smile

Хоть пост и 16 года, НО! Это самый ужасный совет!!!

НЕ обязательно делать что-то для всех. Достаточно просто делать это. Программированию учатся на практике читая документацию,  а не просто ее читая.
Есть люди  кто берет заказ на фрилансе и учится по ходу дела. и опыт и деньги(заказчик получает полено). А есть те, кто просто спрашивают себя, а как сделать это - и делают. И чем сложнее задача, тем глубже придется копать, лезть в документацию. Это похоже на метод Карла Сагана. чтобы разобраться в теме, попробуй объяснить это так, чтобы понял ребенок.Если не можешь что-то объяснить значит не знаешь этого и нужно сначала изучить.

Я за свою жизнь сделал СТОЛЬКО НЕ нужной фигни, я столько написал велосипедов, зато я обрел отличный опыт.

Нужно написать свой фреимворк с блекджеком и теми ш***ми которые нравятся тебе, не фреимворка ради, а опыта!. 
Если бы никто не пытался сделать свое, мы бы все копали землю мотыгами.
--------------------
<удалено администрацией>
PM MAIL   Вверх
_zorn_
Дата 17.2.2017, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(Zhenek @  17.2.2017,  22:21 Найти цитируемый пост)
чтобы разобраться в теме, попробуй объяснить это так, чтобы понял ребенок.Если не можешь что-то объяснить значит не знаешь этого и нужно сначала изучить.

Это вроде Энштейн говорил.

Цитата(Zhenek @  17.2.2017,  22:21 Найти цитируемый пост)
Я за свою жизнь сделал СТОЛЬКО НЕ нужной фигни, я столько написал велосипедов, зато я обрел отличный опыт.

Я тоже. Но ни одного фреймворка и прочего "общефункционального и всего умеющего комбайна". 
Я как УВИДЕЛ, как надо писать - тогда ОСЕНИЛО. 
А так то впринципе можно и до талова через жквери запросы гонять smile
И обучаться на своих лисапедах ))
PM MAIL   Вверх
Zhenek
Дата 18.2.2017, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



Цитата

Я тоже. Но ни одного фреймворка и прочего "общефункционального и всего умеющего комбайна". 
Я как УВИДЕЛ, как надо писать - тогда ОСЕНИЛО. 
А так то впринципе можно и до талова через жквери запросы гонять smile
И обучаться на своих лисапедах )) 


Это да, но автор никогда бы не полез в некие дебри ооп не начни он писать фреимворк))) 

В идеале нужен учитель который покажет, если его нет, можно листать чужой код и смотреть как надо, но для этого нужно сначала выучить основы так, чтобы читая чужой код учиться стилистике и правильному мышлению, а не лезть в документацию пытаясь выяснить что делает та или инная конструкция)))



п.с. Выражение принадлежит Эйнштейну, а метод обучения из него сделал Саган) Что то типа: возьмите ручку и напишите как-будто вы объясняете ребенку, и если что-то не можете объяснить подробно не используя термины(расшифровывать их) то идите и вникните в определение и т.д.))))
Интересный подход)
--------------------
<удалено администрацией>
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1597 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.