| |
|
|
| | Решил попробовать установить и оседлать ваш форум. При установке сделал всё, как написаное вмануале. Итог - захожу на http://myhost/admin/, а там вся страница усыпана нотайсами и несуществующих переменных и индексах массивов. Это так и должно быть ??! Да, если не обращать на нотайсывнимание, тоработает-то впринципе всё нормално, слава богу, на самом созданном форуме нотайсы не сыпятся... Так вот закономерный (и, подозреваю, популярный) вопрос - это у меня руки или сервер кривые или прикажете уровень вывода ошибок снижать вплоть до невывода нотайсов ?! ЗЫ: Локалка - Денвер (не надо на неё гнать плз, она отличная и проверена временем).
И вот ещё попутный вопрос: А можно ли как-то присобачить к именам таблиц форума префиксы, чтобы обходиться одной базой ?! | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 03:05)
| | | Может у вас включет режим когда все, все предупреждения выводяться???? | |
| |
|
|
| |
автор: cheops (из кафе) (03.07.2006 в 10:33) |
|
| |
для: DDK
(03.07.2006 в 03:05)
| | | Notice - это советы, на код они не влияют: можно понизить уровень предупреждения ошибок.
>И вот ещё попутный вопрос: А можно ли как-то присобачить к именам таблиц форума
>префиксы, чтобы обходиться одной базой ?!
Это планируется сделать в 4 версии форума.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=17571 | |
| |
|
|
| |
|
|
| |
для: cheops (из кафе)
(03.07.2006 в 10:33)
| | | Не, ребят... я конечно вас уважаю всех сильно, но так форумы не пишут. Создаётся впечатление, что форум написан на PHP4, а админка на PHP3... Т.е. складывается такое ощкщение (код я еще ваш не смотрел), что условия типа:
IF($var == 1) // Нормально для PHP3
|
Приравнивается к такому:
IF(isset($var) && $var == 1) // Стандарт PHP4
|
Ну... не дело это. | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 12:23)
| | | Я так всегда пишу
IF($var == 1)
все работает на ура | |
| |
|
|
| |
|
|
| |
для: CrazyAngel
(03.07.2006 в 12:26)
| | | Это некачественная работа... уж если писать, по обработчик ошибок должен быть целостной системой. | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 12:35)
| | | Поясните мне, а что тут нецелостного? | |
| |
|
|
| |
|
|
| |
для: Loki
(03.07.2006 в 12:58)
| | | Полноценный, целостный код должен не только выполнять данные ему функции, но и содержать себе систему безопасности и обработчик возможных ошибок. | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 19:34)
| | | Можно пример "возможной ошибки"? | |
| |
|
|
| |
|
|
| |
для: Loki
(03.07.2006 в 22:42)
| | | см. внизу темы | |
| |
|
|
| |
автор: glsv (03.07.2006 в 13:21) |
|
| |
для: DDK
(03.07.2006 в 12:35)
| | | >Это некачественная работа
Оператор if некачественно проведет сравнение? :) | |
| |
|
|
| |
|
|
| |
для: glsv
(03.07.2006 в 13:21)
| | | качественная.
но
IF($var)
выглядет намного короче чем
IF($var == 1). | |
| |
|
|
| |
|
|
| |
для: RV
(03.07.2006 в 13:42)
| | | а если $var будет равно 2, 3, 100, -5... чей вариант будет правильнее? | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 12:35)
| | | уж если писать, по обработчик ошибок должен быть целостной системой.
Я обычно так и пишу, но если не для себя, то под конец ставлю error_reporting(0); и чтоб не свистело...=)) Обычно эти замечания у меня возникают, когда я пытаюсь, скажем получить mysql_result() из базы, в которой еще все таблицы пустые и т.д. Устаю "@" ставить, а постоянно писать if(mysql_affected_rows() != 0) тоже утомляет... | |
| |
|
|
| |
автор: glsv (03.07.2006 в 13:20) |
|
| |
для: DDK
(03.07.2006 в 12:23)
| | | >но так форумы не пишут.
Вы, конечно-же, праве показать всем как нужно писать именно форумы на примере Вашего собственного форума.
:) | |
| |
|
|
| |
|
|
| |
для: glsv
(03.07.2006 в 13:20)
| | | Форум я взял в качестве примера серьёзного веб-приложения. Сам я форум еще не писал, но написал DDK Chat, в котором вы не встретите ни единого нотайса. Да и не хочу я хвалиться своими заслугами, просто согласитесь же - это ваша недоработка. Делать надо качественно и учитывая особенности версии языка. А тому, что это недоработка подтверждением слуит тот факт, что на самом форуме всё чисто и аккуратно сделано, а в админ-панели - с нотайсами. Простой пример - скачивает ваш форум юзер и ставит на только что установленную и ненастроенную локалку. Это его первая работа с Апачем, допустим. Делает всё, как написано в мануале, всё правильно. Потом заходит в админку и видит сей ужас, выражающийся кучей нотайсов. Юзер либо просто забивает на этот форум (года два назад я бы так и сам поступил), или идет сюда к вам на форум и спрашивает, мол так и так, что за нафик ? А вы ему отвечаете - "дорогой, понимаешь, можно программить с полной выкладкой себя и писать обработчик ошибок, а можно пойти по пути наименьшего сопротивления и снизить уровень вывода ошибок до минимума. Мы выбрали второе и советуем тебе так делать в твоих работах." Юзер еще совсем зеленый и сдуру делает на всей своей локалке уровень вывода ошибок минимальный (до невывода нотайсов). Юзер начинает учиться программить на PHP дальше, пишет уже серьёзные приложения... а в процессе разработки последних возникают у него проблемы ему непонятные. А проблемы такие мелкие обычно и рещаются прочтением нотайса. А у юзера-то они выключены ! Юзер идёт опять же на этот форум... задает вопрос в меру того, что она наблюдает у себя на выводе скрипта, а наблюдает он ничего ровным счетом. Мы ничего не понимаем из его вопроса и начинаем на него наезжать, мол, ты нотайсы и ошибки читай ! А у него же они выключены... и КТО в этом ВИНОВАТ, скажете вы ?! Ой... задолбался я уже эту логическую цепочку расписывать.... Короче вывод: Получается так, что вы учите людей халтурить в коде ?
N.B. Как там в одной рекламе пива было - "Зрите в корень, мужики !" © | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 19:32)
| | | >N.B. Как там в одной рекламе пива было - "Зрите в корень,
>мужики !" ©
Козьма Прутков в гробу извертелись :))) Да еще с копирайтом...
А если серьезно, мы показываем то, что нужно знать истоки той или иной вещи, в частном конкретном случае, методологии программирования. Потому что только так, а не иначе можно серьезно разбираться в том или ином вопросе. Потому что если по другому, если с лету с наскоку, и быстрей бежать раздавать миру свои гениальные мнения, то не ровен час получится так, что до конца жизни можно будет ставить пивной копирайт на известное изречение Козьмы Пруткова.
Серьезный человек отличается от несерьезного тем, что первый думает до того, как что-то сказать. Особенно долго он думает перед тем, когда хочет понавешать ярлыков и сказать что халтура, а что нет, как надо делать и как не надо.
А профессионал от непрофессионала отличается тем, что у первого большое количество успешных жизненных проектов. А для успешных проектов, правда, очень важно "чувства стиля", как там кто-то вверху или внизу сказал. Только перед тем, как говорить, что "ребята, посмтрите, какое у меня чувство стиля, следуй за мной!" нужно сделать согласно этому стилю большое количество успешных проектов. Именно успешных. И немало. И всяких - и коммерческих и некоммерческих и с большой нагрузкой и с небольшой, и на PHP и на не PHP... Понимаете? Потому что критерий истины - это ПРАКТИКА. Только Практика и ничто иное. И вот после этого, как практикой показано, что твое чувство стиля имеет право на жизнь, тогда можно сказать "Товарищи, я вот делал так то и так то, и вот у меня все получилось. Если хотите, делайте, как я, потому что из моего немалого опыта и немалой реальной статистики я могу с большой вероятностью сказать, что если вы будете делать также, у вас тоже все получится". Только тогда. Потому что если иначе, если ярлыки на всех навешивать, если говорить "ой, блин, в вон тот то - халтурщик, а вон этот - вообще полное чмо... Не, я те правду, говорю, уж я то знаю. А вон тот - вообще предатель. Уж так я ему верил, а он... Все делает не так как, я - короче ламос полный, зря я в него верил, нихрена правильно работать не умеет. Почему ламос? Не, ну ты как не понимаешь... Ламос потому что не так как я делает! ". Вот если так - то это психологический туалет получается. | |
| |
|
|
| |
|
|
| |
для: cheops (из кафе)
(03.07.2006 в 10:33)
| | | >> Notice - это советы, на код они не влияют
Совет ? Никогда еще не видел нотайсов с советами, обычно они прямо-таки утверждают, а не советуют.
Notice: Undefined variable: confname in z:\home\upgrade\www\admin\index.php on line 54
|
- это, скажете, совет ? Что-то не похоже. Мне кажется, это всё же утверждение о том, что еременная не определена (не существует, иными словами).
>> Notice - это советы, на код они не влияют
Да, на код не влияют, зато на вывод влияют ! Когда у меня в значение инпут-поля выводится текст нотайса - это конечный юзер должен не замечать ? Когда вся страница улеплена нотайсами и весь дизайн ползет - это нормально ? Да и вообще, мне кажется, спорить тут уже не о чем. Абсурд. | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 19:39)
| | | Плюньте - этот бисер метать бесполезно.
Чупс и компания - взрослые люди, которым поздно прививать основы стиля.
Пишите собственный код аккуратно - он будет радовать Вас, и тех, кто разделяет Ваши взгляды. Уверяю Вас, таких будет достаточно. | |
| |
|
|
| |
|
|
| |
для: Trianon
(03.07.2006 в 20:19)
| | | Да жалко просто... не ожидал я такого поворота событий, что люди, в какой-то степени благнодаря которым я, можно сказать, вырос (в оболасти php-программинга), так рассуждают и пишут коды... | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 20:27)
| | | Согласен с cheops'ом и Дизайнером и по существу и потому, что я сам привык пренебрегать всеми возможными notic'ами. Но здесь есть одно маленькое "но". Возьмут конкуренты такой невыдержанный в строгих стандартах скрипт. Уберут в присутствии потенциального клиента строчку, которая подавляет ошибки: error_reporting(E_ALL & ~E_NOTICE); И полетят камни в адрес создателей подобного приложения, которые будут приправлены высказываниями "А у нас такого Вы не увидите" с наглядными примерами. Доказать что-то обратное будет сложно. К тому же зарубежом очень любят соответсвие приложения всяким правилам и предписаниям... | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 20:27)
| | | Строки
IF($var == 1) // Нормально для PHP3
|
Приравнивается к такому:
IF(isset($var) && $var == 1) // Стандарт PHP4
|
можно развернуть в другую сторону. Если отбросить выдержанность стиля, то вторая строка просто маразм - мало того, что проверяется два условия, так этот код ещё и сложнее для восприятия и как по нему учить людей программированию? Понять конструкцию $var == 1 можно, можно понять, что она делает. Что делает IF(isset($var) && $var == 1) тоже можно понять, но объяснить, что это на самом деле $var == 1 уже гораздо сложнее. Я предпочитаю использовать один простейший стиль - простота кода - он должен быть элементарным, самым простым и доступным. Даже если в нём имеется ошибка, её будет проще найти, и другому человеку в том числе. Если инструмент не позволяет мне просто писать, я его настрою так, чтобы позволял... Вы думаете в других приложениях все эти Notice вычленяют при помощи IF(isset($var) && $var == 1)? Как бы не так... загляните в любое Web-приложение, хоть в тот же phpMyAdmin - там тупо в начале стоит
@Error_Reporting(E_ALL & ~E_NOTICE);
|
А дело в том, что форум и уж тем более phpMyAdmin начинался разрабатываться за долго до того, как был изменён уровень ошибок по умолчанию. Нет возможности сейчас отредактировать Web-приложения так как это внесёт в отлаженный годами код новые ошибоки. В программировании и в жизни работает как правило прагматизм, а не идеология - все идеологические и стилистические требования отступают на второй план в любой компании - если начинается цейтнот.
PS Любая сложная вещь менее стабильна, чем простая.
PPS В PHP каждый год что-то меняется, пока будет возможность, что-то не переписывать, я буду её использовать, потому, что как любому нормальному человеку мне есть чем заняться без того, чтобы следовать полуутверждённым стандартам и моде. И уж тем более не будут никогда
заменять на
да и никому этого не советую. | |
| |
|
|
| |
|
|
| |
для: cheops
(03.07.2006 в 21:22)
| | | А если в коде сначала идет цикл WHILE (допустим), в процессе действия которого создаётся определённая переменная, значение которой после цикла проверяется, и этот цикл не выполняется, т.е. переменная не создаётся ?
На пальцах - что правильно, это:
<?
$i = rand(0, 10);
while($i > 5)
{
$lastcount = $i;
$i -= 1;
}
if($lastcount == 8)
{
echo $lastcount;
}
else
{
echo "error";
}
?>
|
или так:
<?
$i = rand(0, 10);
while($i > 5)
{
$lastcount = $i;
$i -= 1;
}
if(isset($lastcount) && $lastcount == 8)
{
echo $lastcount;
}
else
{
echo "error";
}
?>
|
?! | |
| |
|
|
| |
|
|
| |
для: DDK
(03.07.2006 в 21:44)
| | | Я бы понял все эти увёртки, если бы это был C++ и если бы в C++ это было возможным - там действительно не инициализированная переменная зачастую заполняется мусором, что может приводить к ошибкам - в PHP переменная всегда иницируется пустой строкой или 0 в зависимости от контекста... Зачем же код усложнять? Если $lastcount не равно 8, оно заведомо не может быть определено, поэтому проверка isset($lastcount) просто лишняя... Я не понимаю, почему на языке с произвольным объявлением переменных пытаются чуть ли не к строгой типизации привести... строгая типизация вещь хорошая, особенно когда кода пол миллиона строк, но на PHP такие объёмные приложения не пишутся - он захлебнётся раньше... и уж в любом случае решать проблемы стоит не за счёт кода. Notice - это совет, который позволяет решить ряд задач для людей, которые пришли из другой среды или другого языка и которые раньше не сталкивались с явлением, когда любое вхождение переменной приводит к её немедленному созданию. В любом случае, лучше писать вместо
<?php
$i = rand(0, 10);
while($i > 5)
{
$lastcount = $i;
$i -= 1;
}
if(isset($lastcount) && $lastcount == 8)
{
echo $lastcount;
}
else
{
echo "error";
}
?>
|
писать
<?php
$lastcount = 0;
$i = rand(0, 10);
while($i > 5)
{
$lastcount = $i;
$i -= 1;
}
if($lastcount == 8)
{
echo $lastcount;
}
else
{
echo "error";
}
?>
|
как это принято во всех языках программирования, начиная с Pascal. Проблема PHP заключается в том, что он слишком не слогласован и не слишком продуман - его сначала сделали, а теперь думают, как с ним жить. Справедливости ради следует отметить, что это не единственный язык с такой проблемой - она коснулась практически всех языков программирования, в своё время множество дурацких конструкций было выкинуто из Fortran, у C/C++ не очень согласована стандартная библиотека, проблема дублирования функций в Java вообще приобретает угрожающий характер. PHP, точно также как и Perl не ортогонален (хотя очень хочет стать ортогональным языком), а это означает, что здесь не два и не три способа решения одной и той же задачи, эффективность и правильность каждого из методов не очевидны. Не нужно было разработчикам PHP такскать из Perl возможности все подряд (Perl как раз преследовал обратную цель - он создавался как можно более не ортогональным). Приведу самый безобидный пример: нельзя разработчика давать две функции die() и exit() - половина будет одну использовать, половина - другую. Будут раздражаться, вести религиозные войны, а рано или поздно одну из них отменят, обесценив при этом весь предыдущий код. | |
| |
|
|
| |
|
|
| |
для: cheops
(04.07.2006 в 01:23)
| | | >Зачем же код усложнять?
Затем, чтобы сделать в нем ошибку, потом пригласить кучу спецов, и после того, как они в коде ничего не поймут, с удовлетворением сказать себе любимому "А я, оказывается не так и глуп, если даже они в моем коде ничего не поняли" :) | |
| |
|
|
| |
|
|
| |
для: cheops
(04.07.2006 в 01:23)
| | | Обнадежили :) А я-то, ввиду того, что я сказал выше, хотел избавлять от notic'ов около 1000 модулей CMS Proteus. | |
| |
|
|
|