Вопрос конечно абстрактный, вот смотрите, есть допустим небольшой проект, папка классы, классов штук 10, под каждый отдельный файл (для __autoload), в итоге каждый файл по размеру занимает где то по 1 кб. Как правило в большинстве мест подключаются несколько из этих классов, но бывают и довольно редко-используемые классы. И есть мысль засунуть все классы в 1 файл, будет он занимать 10 кб. Будет ли производительно держать все классы в одном файле и подключать единожды этот файл? Интересует именно вопрос производительности, а не удобства и логики. Вопрос возник.. я тут пошарил по wordpress, нашел там файл с функциями (functions) который более 100 кб., я конечно новичок, но вроде как все эти функции не взаимосвязаны и все же их держат вместе, с другой стороны классы у них как раз по разным файла распиханы. Как бы вы поступили на моем месте? Просьба по возможности дать более подробный, развернутый ответ, а не "ну попробуй".. т.к. мне этот вопрос по ночам спать не дает, я уже несколько раз переписывал свое это мини веб приложение (сначала оно было на функциях, потом я начал тонуть в подключении файлов, затем я перешел на классы со статическими методами и теперь только __autoload использую, но сейчас возникли еще некоторые трудности и вопрос по какому пути идти).
пацаны делают так: autoload.php Код (PHP): <?php class Autoload { public static function loadClasses($className) { require_once ('classes/'.$className.'.php'); } } index.php Код (PHP): <?php require_once('autoload.php'); spl_autoload_register(array('Autoload', 'loadClasses')); все, забыли про инклюды, там где нужно класс заинклюдится сам, там тока создать объект в любом месте, где нам нужно Код (PHP): $front = new front(); $front->start(); соответственно в папке classes должен быть файл front.php а в нем класс front работает эта шняга процентов на 5-10 быстрее чем 20 инклюдов в index.php
Dmitriy A. Arteshuk я так и делаю, единственное что, методы в классах статические, но это уже на любителя. не совсем то я спрашиваю, меня интересует в целом. Допустим на любом сайте присутствуют слова "Войти", "Логин", "Пароль", "Запомнить", "Регистрация", "Выйти", "Сохранить", и т.д. Допустим я хочу создать мультиязыковой сайт, я создаю файл в него засовываю массив, а на самих страницах за место текста пишу переменные этого массива, примерно так это выглядит: Код (Text): $LangPack = array( 'enter' => 'Войти', 'login' => 'Логин', 'password' => 'Пароль', 'register' => 'Регистрация', 'remember_me' => 'Запомнить', 'forgot_password' => 'Забыли пароль?' ); Часть кода: Код (Text): <form method="POST" id="login"> <a href="register.php"><?php echo $LangPack['register']; ?></a><br /> <label><?php echo $LangPack['login']; ?>: <input type="text" name ="login" /></label><br /> <label><?php echo $LangPack['password']; ?>: <input type="password" name ="pass" /></label><br /> <label><input type ="checkbox" name="save_user" value="yes" /><?php echo $LangPack['remember_me']; ?></label><br /> <input id="enter" type="submit" value="<?php echo $LangPack['enter']; ?>" /><br /> <a href="forgot_password.php"><?php echo $LangPack['forgot_password']; ?></a><br /> </form> Вопрос возник хранить данные для всех страниц (всех имеется ввиду "технических" страниц - регистрация, вход, настройки и т.п.) т.е.: Код (Text): $LangPack = array( // переменные со страницы регистрации // переменные со страницы входа // переменные со страницы настроек // еще какие-нибудь переменные ); Но в таком случае из такого массива будет использовать 10% переменных, при это 90 будут мертвым грузом, за то удобно. или же создавать для каждой страницы отдельный файл с отдельным $LangPack если создавать отдельные, то размер каждого файла будет ну где то чуть меньше 1 кб. а если все вместе в одной файле, то этот файл будет не более 5 кб.
Всё-таки мне не понять, зачем ради автолоада плодить классы, в которых все методы статические? Зачем разбивать небольшую систему на исходники в 1Кбайт?
У меня допустим проверку данных cookie проверяет один класс (находящийся в отдельном файле), а если я захожу вводя логин и пароль, за это отвечает уже другой класс, находящийся в отдельном файле. Между собой эти классы не пересекаются, зачем их держать в одном файле либо в одном классе? и что такого плохого в статических методах и чем они будут хуже если использовать не статические, допустим если я использую не статические методы, мне необходимо создать объект класса, лишняя строчка кода, а тут его создавать не надо. или я где то как обычно не прав? Вопрос в том что лучше 5 файлов по 1 кб. или же 1 файл на 5 кб. при этом использоваться будет всего 1 кб. из этого файла, а 4 кб. будут мертвым грузом. С одним файлом на много проще работать, чем 5-ю.
Правильно ли я понял. У тебя много классов которые хранятся в отдельных файлах. Как бы ты там ни написал, но я думаю что при генерации обычной страницы у тебя будет инклудится не больше 7 классов. Можешь посчитать сколько у тебя. Думаю что не скоро это станет узким местом в твоем приложении.
У меня во всех файлах всего один require_once, на один файл, этот файл содержит следующий код: Код (Text): function __autoload($name) { require_once ( $_SERVER['root'].'classes/'.$name.'.php' ); } и еще несколько строк кода который необходим на всех страницах более я ни где не использую require_once, или речь вообще ни об этом шла?
Ну положим весь смысл в том, чтоб каждый из классов представлял какое-то цельное абстрактное понятие, и не обязательно потребуется только один объект класса, их может создаваться много, каждый из которых сходен по структуре и поведению, но различается по значениям атрибутов. А 1 Кбайт, 5 Кбайт - это смешные размеры, так что если это соответствует истине, то тут нечего разбивать на модули.
Пока что я не столкнулся с необходимость писать именно ООП приложение, по этому в моем случае класс со статическими методами отвечает за что то конкретное, например за проверку cookie или введенного логина и пароля, деление так происходит. Раза 3 я уже переписывал свое это приложение. Изначально там классов не было как таковых, были только функции. а за Спасибо, учту.