Коллеги, Постоянно сталкиваюсь с такой проблемой: есть два файла, в каждом по одному классу. В основной странице вызываю инклудами оба файла - всё ок. Но перебрасывать данные из класса в класс хочется и внутри этих файлов. Но тогда надо следить, какой файл с классами вызывается первым в основном файле и рано или поздно путаешься и начинается ошибка переопределения класса. Кроме того, работая в редакторах, которые подсвечивают переименные и методы класса (то есть при инклуде видят другой файл и помогают) попадаешь на то, что поскольку в файле с классом ты не вызываешь другой файл с классом, то редактор не видит второго файле и не может подсвечивать. Та же проблема и с <meta charset="utf-8"> Приходится пихать эту строку во все файлы, чтобы не случились иероглифы, в итоге на основной странице если посмотреть source, видно штук 5 таких строк.
используй namespace и autoload Добавлено спустя 7 минут 53 секунды: http://php.net/manual/ru/language.namespaces http://php.net/manual/ru/language.oop5.autoload
Если я вас правильно понял. Хочется спросить для какой цели перебрасывать данные из класса в класс? зачем грузить 2 класса? теперь об __autoload предположим вы пытаетесь создать обьект от класса Код (PHP): $ob = new name_class(); если php не находит в вашем коде класс name_class то php пытается найти функцию __autoload и если ана есть (вы ее должны описать) то он ее вызовит Код (PHP): function __autoload($name){ include '$name.php'; } и будит вам счастье Добавлено спустя 2 минуты 42 секунды: а на счет namespace яб хотел уточнить у mahmuzar или других . я наверное забыл ,но это поможет в случай если все классы висят в памяти? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
amir_Mirov, namespace я предложил чтобы не было путаницы в коде. Конечно автолоада не будет, я кстати тоже обращался с подобным вопросом, и как автор столкнулся с подобной проблемой конфликта. При том , если использовать namespace IDE видит классы.
спасибо об этом незнал. да и про namespace не особо незнаю. но пологаю namespace работают когда классы загруженны в память ?
Код (PHP): $a = new \my1\MyClass; $b = new \my2\MyClass; http://php.net/manual/ru/language.namespaces
Коллеги, Попробовал советы...Для тех кто в танке, помогите понять. Попробовал автолод - избавился от инклудова, классы сами загружаются, классно! Но! У меня по ходу сама логика неправильная....Вот у меня есть класс class_sqlWork, он занимается работой с БД. И у меня есть класс class_User. Он занимается операциями над пользователями. В основной программе я вызываю метод класс class_User, который проверяет авторизован ли пользователь на что-нибудь. Тогда улассу class_User нужно залезть в БД и проверить кое-что (ну является ли пользователь админом и так далее), соответственно мне надо из этого класса вызвать класс class_sqlWork (чтобы пролезть в БД). Раньше я как делал...все операции и логика в основном файле а из класса класс не вызывал, но тогда встаёт другая проблема. Предположим у нас класс отрисовывает таблицу в зависимости от того, является ли пользователь админом. Получалось так, в class_sqlWork запрашивались данные и кидались в класс class_BuildData, который рисовал в зависимости оттого, что получал. Но это крайне сужает область применимости методов, сами понимаете. Добавлено спустя 24 минуты 26 секунд: Более того: Autoload приводит к тому что Редактор не видит задействованные классы. Вы в чём программируете?
Я например не понимаю чем тут сужается область применимости методов.вам что то мешает применить какой - то метод? Раскройте вопрос иначе. касаемо редакторов я использую notepad++ Phpstorm изучаю php чуть больше года. Редактор - средство, вы должны знать где какие классы у вас грузятся без редактора.
Смотрите: в основном файле стоит автолодер, в файле первого класса вызываем метод из второго класса. В реальности работать будет, но при написании программы, когда вы нопишете $a = new someClass; у вас название класса не подсветится. Когда вы начнёте писать $a-> селектор не покажет меню с доступными классами, значит вам надо будет каждый раз писать заново имя метода - ошибиться очень легко. Сейчас когда я перебрасываю переменные из класса в класс в основном файле (при отключенном автолодере и включенных инклудах классов) как только я ставлю первую букву, редактор показывает меню с выбором доступных классов. Количество ошибок снижается в разы.
Знать где и что конечно хорошо, но когда проект растягивается на длительное время или возвращаешься после перерыва в несколько месяцев вспомнить где и какие классы подключаются и что там есть нереально. Потому в реальности люди используют IDE в которых все прекрасно подсвечивается, показывается, анализируется, находится где используется, от чего зависит и куча других ништяков. А нотепады в топку.
Хорошо и нужно знать где и что у тебя лежит ! Особенно на первых порах. и понимать эти "ништяков " как дополнительный инструмент. Когда проект растягивается я не думаю , что должны возникать вопросы о том как построить правильную логику. Но если-же он(проект) всет-ки растягивается и появляются еще куча проектов.то тут я считаю должна помогать логика построения любого проекта - проект должен быть понятен. это в первую и самую главную очередь. а потом уже нужно пологатся на ide. а по поводу notepad++ ваше сообщение в нужно в топку.
Незнал будут сплывать подсказки решил проверить, все отрабатывает на ура. ПОгнали: создадим 5 файлов +1 папку(class) index.php Код (PHP): <?php if(true) require_once "welcom.php"; else{ require_once "404.php"; } ?> welcom.php Код (PHP): <?php if(ture){ require_once('class/a.php'); require_once('class/b.php'); require_once('class/c.php'); }else{ require_once('welcom_admin.php'); } $ob = new c(); $ob->call_parent_fun(); echo $ob->user; //метод был добавлен из доступных методов //свойство(поле) было добавленно из доступных свойств(полей) ?> class/a.php Код (PHP): <?php class a{ function index(){ echo 'Welcom user'; } } class/b.php Код (PHP): <?php class b extends a{ function call_parent_fun(){ parent::index(); // обращаемся к методу index из класса А } } ?> class/c.php Код (PHP): <?php class c extends b{ public $user; function index(){ parent::call_parent_fun(); // обращаемся к методу index из класса А через класс b используя метод call_parent_fun() } } ?> Добавлено спустя 18 минут 42 секунды: я кажется вам написал относительно __autoload() если php не находит в вашем коде класс name_class то php пытается найти функцию __autoload и если ана есть (вы ее должны описать) то он ее вызовит Хорошо давайте я зделаю это за вас: Добавим еще 1 файл и отредактируем welcom.php class/x.php Код (PHP): <?php class x { function yuo_look_me(){ echo 'Как так:?'; } } ?> redact: welcom.php Код (PHP): <?php if(ture){ require_once('class/a.php'); require_once('class/b.php'); require_once('class/c.php'); }else{ require_once('welcom_admin.php'); } $ob = new c(); $ob->call_parent_fun(); echo $ob->user; // функция вышла из доступных функций function __autoload(){ require_once('class/c.php'); } $object = new x(); $object->yuo_look_me() // и это тоже выскачило вдруг ? наверное IDE Глючит!!! ?> IDE IDE .... Х это ! если вы без него работать не умеете. научитесь писать код в notepadd++ набейте шишки это будит самый лутшии опыт.а потом ide будит отличным помощником.
)) Добавлено спустя 31 секунду: бро, научись пользоваться нормальной IDE Добавлено спустя 1 минуту 5 секунд: я сови шишки набил на notepad++ мне хватило. А namespace к этому отношения не имеет. И про автолоад я ничего не писал. Добавлено спустя 2 минуты 4 секунды: Код (PHP): <?php if(ture){ а зачем так писать?
я обращался к автору. данного топика.вам я только задавал вопрос относительно namespace в свойх интересах , выше. а как написать? Добавлено спустя 1 минуту 20 секунд: с чего вы зделали вывод что мне стоит учится этому? нормальное ide что это в вашем понимании?
просто я пока полноценно не научился пользоваться ею. Поэтому посоветовал, харкорить на notepad хорошо, но лучше перейти уже на иде. у тебя ж else часть никогда не выполнится
если вы в целом посмотрите почему и для чего я написал весь этот код. то я думаю данный вопрос отпадет. По большому счету notepadd++ = редактор (без подключенной к нему IDE) и любой другой по вашему IDE тоже является редактором с готовым подключенным (IDE), IDE Integrated development environment - система программных средств. так что весь этот балаган бесполезен. Так как к тому-же Notepad можно подключить IDE. Автору нужно учить язык понять его а потом уже думать об IDE. IDE - допускает имя функций(метода) fgdgfgdfgfdgdfgdfgdfgdfgfdg такого вида - это допущение новичку дает не правильно понимание КАК писать код. и код становится грязным и не понятным .могу продолжить . но посыл задуматся я думаю дал . и кто в теме тот меня поймет.
amir_Mirov, я понимаю что ты недавно америку открыл, но все делается не так )) И лучше сначала избавься от каши в голове, а потом уже рассказывай новичкам о том как писать код. if(ture){ блин ))
если воспользоваться этой возможностью IDE, то будут подсвечиваться все классы из указанных директорий
Знаете ув форумчани сидеть и дергать что то из контекста. Например: я написал об IDE при чем тут Notepad ? если Разработчик создаст класс с таким именнем - ему не нужно думать о том как потом понимать что это за класс и как ручками его прописать чтобы не было ошибки. он его дернит в помощью IDE. Мне казалось вы компитентный - ибо я не понимаю как можно что то не понять и назвать это бредом.Я написал что нотепад сохранит? не писал я этого! вы за уши притинули суда свое высказывание - которое не имеет не какого обьективного основания. Я считаю ваше высказывание "но все делается не так " как минимум должно быть подкрепленно каким-то обоснованием. И по большому счету судя по вашим сообщениям- я четко понимаю что к вам точно прислушиватся не нужно! Специально для вас я приведу пример: В чем каша? - исходя из чего вы позволяете себе такое высказывание поясните ! И вообще с чего вы взяли что вы можете мне писать ? обращаясь ко мне на ты? Это форум и это нужно учитывать ! И не вам говорить мне что мне кому и как рассказывать. А если ваш светлый ум поситит идея тролить меня дальше . да да именно так я вас васпринемаю. То постарайтесь зделать это как минимум обоснованным и в рамках понятия форум
Ну так не прислушивайся, какие проблемы то? А лучше скажи, какая связь между нэймспейсами, классами висящими в памяти, нотепадом, иде, автолоадом и качеством кода? Я вот не понял связи ) Вот кстати пример реализации.