Deutsch

PHP - как грамотно написать?

383  1 2 все
Zahar знакомое лицо02.12.12 15:37
Zahar
NEW 02.12.12 15:37 
Всем привет!
Кто может подсказать?
Как грамотно дополнить нижеприведённый код?
Код должен узнавать какой фаил/url выбран.
<?php
if ($url == index.php)
{
echo "<img src=\"bilder/visa.jpg\" width=\"400\" height=\"646\" border=\"0\">";
}
if ($url == соор.php)
{
echo "<img src=\"bilder/соор.jpg\" width=\"400\" height=\"646\" border=\"0\">";
}
?>
Заранее спасибо!

#1 
GANDJUBAS Ганджубас02.12.12 17:12
GANDJUBAS
NEW 02.12.12 17:12 
в ответ Zahar 02.12.12 15:37
Честно говоря, не понимаю вопроса.
Тот же код, только чище и эффективней в плане нагрузки на процессор.
<?php
if ($url == 'index.php')
{
echo '<img src="bilder/visa.jpg" width="400" height="646" border="0">';
}
elseif ($url == 'соор.php')
{
echo '<img src="bilder/соор.jpg" width="400" height="646" border="0">';
}
?>


#2 
compman знакомое лицо02.12.12 19:38
compman
NEW 02.12.12 19:38 
в ответ Zahar 02.12.12 15:37
<?php
$url = 'соор.php';
if ($url == 'index.php'){
echo '<img src="bilder/visa.jpg" width="400" height="646" border="0">';
}
elseif ($url == 'соор.php'){
echo '<img src="bilder/соор.jpg" width="400" height="646" border="0">';
}
?>


#3 
project33 коренной житель02.12.12 20:15
project33
NEW 02.12.12 20:15 
в ответ Zahar 02.12.12 15:37, Последний раз изменено 02.12.12 20:17 (project33)
если каждому файлу обязательно сопоставлена своя картинка и у всех одинаковые размеры, то можно и так:
<?php $image = array( "index.php" => "visa.jpg", "соор.php" => "соор.jpg"); ?>
<img src="bilder/<?=$image[$url]?>" width="400" height="646" border="0">
Продвижение сайтов, реклама: https://www.pro33.net
#4 
Sergo2008 старожил03.12.12 10:29
Sergo2008
NEW 03.12.12 10:29 
в ответ Zahar 02.12.12 15:37, Последний раз изменено 03.12.12 10:35 (Sergo2008)
Если подходить с точки зрения компактности и конкретно такого подхода с двумя возможными $url, то project33, дал лучшее решение из приведённых до него. Данный вариант подойдёт для вывода большого количества разных картинок, привязанных к разным страницам. ИМХО!
Если же брать конкретный пример с условием без использования массива, при условии что на главной будет одна, а на остальных другая картинка, то я бы так написал.
echo "<img src=\"bilder/".( ( $url == index.php ) ? "visa.jpg" : "соор.php" )."\" width=\"400\" height=\"646\" border=\"0\">";
или так, если быть совсем точным в отношении проверки, и того случая, что картинки выводятся только на двух страницах и не больше.
echo "<img src=\"bilder/".( ( $url == index.php ) ? "visa.jpg" : ( ( $url == соор.php ) ? "соор.php" : "" ) )."\" width=\"400\" height=\"646\" border=\"0\">";
При этом правильней писать не html в РНР, а РНР в html, таким образом.
< img src="bilder/"<?php echo ( $url == index.php ) ? "visa.jpg" : "соор.php"; ?>" width="400" height="646" border="0">
По крайней мере так пишут, с точки зрения современного подхода правильного написания, и быстродействия обработки.
Приведённый мной вариант не совсем удобочитаемый в сравнении со стандартным if(xx) { xx } else { xx }, но намного короче, и по мне намного проще для простых проверок на 2-3 условия, так как не требует дублирования строк(и).
#5 
project33 коренной житель03.12.12 10:41
project33
NEW 03.12.12 10:41 
в ответ Sergo2008 03.12.12 10:29, Последний раз изменено 03.12.12 10:51 (project33)
В ответ на:
Если подходить с точки зрения компактности и конкретно такого подхода с двумя возможными $url, то project33, дал лучшее решение

не совсем так, мой пример универсален для любого количества $url, их нужно только вписать в массив. кроме того в нем нет условного оператора, который прилично так грузит проц при большой выборке. да и сам код с условным оператором при большом количестве страниц разрастется до гиганских размеров, а в моем случае только добавится минимальный код "индекс" => "картинка". за отзыв спасибо
Продвижение сайтов, реклама: https://www.pro33.net
#6 
Sergo2008 старожил03.12.12 11:37
Sergo2008
NEW 03.12.12 11:37 
в ответ project33 03.12.12 10:41, Последний раз изменено 03.12.12 12:04 (Sergo2008)
project33, ты не совсем понял что я имел в виду, а я имел в виду что в твоём варианте с этими двумя страницами это самый оптимальный вариант. Я так же следующим предложением указал на то что такой вариант хорош для большого количества страниц.
Мой же вариант рассчитан как раз на вывод 2-3 страниц и не больше, конкретно по примеру топик писателя, на два условия. И если учитывать что таких страниц будет более 3-х, то данный вариант не оптимален. А для двух условий, он проще некуда, и массив тут не обязателен.
В любом случае, каждый пишет так как считает лучше, я лишь привёл свой вариант, который лишь в написании более компактный чем стандартный, но время обработки его такое же как и стандартного. Я такой вариант использую что бы сократить код на странице, убрав лишние строки там где это не нужно. К примеру зачем делать 4 строки(в примере автора вообще 10), когда всё вместится в одну строку. По крайней мере я такого подхода придерживаюсь, так как кодю время от времени ток для себя, и не придерживаюсь каких то стандартов, типа PEAR разрабов или ещё кого..
Сейчас прочёл ещё раз топик атора темы, и понял что "смотрел в книгу, а видел фигу". Не разглядел что автор спрашивает про дополнить код, а тут только два простых варианта, либо пример project33 с массивом, либо switch - > case проверка, типа так:
switch ($url) {
case "index.php": $img = "visa.jpg"; break;
case "соор.php": $img = "соор.jpg"; break;
default: $img ="default.jpg"; //Не обязательно
}
echo "<img src=\"bilder/".$img."\" width=\"400\" height=\"646\" border=\"0\">";
Но switch уже для более сложных конструкций, к примеру если на условие требуется больше действий, к примеру несколько переменных. В конкретном случае с расширением по вопросу автора, массив применять лучше, будет более компактно.
#7 
GANDJUBAS Ганджубас03.12.12 12:06
GANDJUBAS
NEW 03.12.12 12:06 
в ответ Sergo2008 03.12.12 11:37, Последний раз изменено 03.12.12 12:06 (GANDJUBAS)
Очень рекомендую Вам почитать про разницу между одинарными и двойными кавычками в php.
#8 
project33 коренной житель03.12.12 12:19
project33
NEW 03.12.12 12:19 
в ответ Sergo2008 03.12.12 11:37, Последний раз изменено 03.12.12 12:21 (project33)
тогда все ок . вариант со свич-кейс мне тоже в голову пришел сразу, конструкции типа elseif я немного недолюбливаю, но я все же предпочитаю вариант совсем без выборки когда это возможно
Продвижение сайтов, реклама: https://www.pro33.net
#9 
Sergo2008 старожил03.12.12 16:56
Sergo2008
NEW 03.12.12 16:56 
в ответ GANDJUBAS 03.12.12 12:06
Что касается двойных кавычек и одинарных, я знаю, я просто оставил кавычки из примера, не хотел всё переправлять.
В ответ на:
тогда все ок . вариант со свич-кейс мне тоже в голову пришел сразу, конструкции типа elseif я немного недолюбливаю, но я все же предпочитаю вариант совсем без выборки когда это возможно

Не всегда можно решить просто без выборки, особенно кода на каждое условие нужно выполнить несколько действий, но в данном случае да, тут либо массив, либо как я привёл с короткой записью if. Когда ток первый раз начал читать по пыху, я тоже строил как автор на elseif, притом сложные многоуровневые, пока не узнал другие варианты условий...
Но да лан..., и так уже кучу написал, учитывая что я не программист, пущай отвечают профи, а то глядишь кроме кавычек я ещё чего не захотел исправлять...
#10 
miltorg старожил03.12.12 18:38
miltorg
NEW 03.12.12 18:38 
в ответ GANDJUBAS 02.12.12 17:12
В ответ на:
$url == 'index.php'

Поговаривают что три равно работает быстрее.
Половина евро в час
#11 
miltorg старожил03.12.12 19:16
miltorg
NEW 03.12.12 19:16 
в ответ Zahar 02.12.12 15:37, Последний раз изменено 03.12.12 19:21 (miltorg)
Я делал что то подобное. Делал это так:
<img src="bilder/<?=$url?>" width="400" height="646" border="0">
Половина евро в час
#12 
Sergo2008 старожил04.12.12 09:08
Sergo2008
NEW 04.12.12 09:08 
в ответ miltorg 03.12.12 19:16, Последний раз изменено 04.12.12 09:11 (Sergo2008)
мильторг, ты вообще понял что написал/предложил?
В ответ на:
< img src=\"bilder/<?=$url?>" width="400" height="646" border="0">

$url содержит название файла открытой страницы, в данном случае index.php или соор.php, это не картинки, а PHP файлы. Ты случаем не чего не перепутал?
#13 
voxel3d патриот04.12.12 09:13
voxel3d
NEW 04.12.12 09:13 
в ответ GANDJUBAS 03.12.12 12:06, Последний раз изменено 04.12.12 09:18 (voxel3d)
Ганж, херня это всё и бессмысленные оптимизации, я перестал (оно не только в пхп) кашу делать из одинарных / двойных кавычек, юзаю двойные и переменные внутри них, не пишу больше:
$foo = 'string' . $value . 'string';


И то что он три строчки в двойных кавычках сделал не ухудшает ничего никак вообще.

Dropbox - средство синхронизации и бэкапа файлов.
#14 
Sergo2008 старожил04.12.12 09:35
Sergo2008
NEW 04.12.12 09:35 
в ответ voxel3d 04.12.12 09:13
В ответ на:
И то что он три строчки в двойных кавычках сделал не ухудшает ничего никак вообще.

На 100% согласен, и даже больше, так как такой подход позволяет так же делать код более удобочитаемым, если строка слишком длинная, к примеру если этой строкой идёт обращение к базе, то там иногда все 10 строк может быть, если разделить..
$foo = 'string'
. $value
. 'string';
Потом.., насколько я помню, по современным стандартам, выражение $foo = "string $value string"; считается уже неправильным(устаревшим) и не рекомендуется к применению.
#15 
miltorg старожил04.12.12 09:55
miltorg
NEW 04.12.12 09:55 
в ответ Sergo2008 04.12.12 09:08, Последний раз изменено 04.12.12 09:56 (miltorg)
Я написал идею,а не код.
$url конечно нужно обрабатывать. Хотя бы для того чтоб "$url содержит название файла открытой страницы,"
В данном случае. Если название файла уже в $url. На перле это так:
s/php/jpg/
На php есть тоже подобная функция. Но. Повторю. Я пишу идею, а не готовый код
Половина евро в час
#16 
voxel3d патриот04.12.12 10:29
voxel3d
04.12.12 10:29 
в ответ Sergo2008 04.12.12 09:35
В ответ на:
Потом.., насколько я помню, по современным стандартам, выражение $foo = "string $value string"; считается уже неправильным(устаревшим) и не рекомендуется к применению.

В 5 PHP расширили возможности парсинга переменных в строках и оно при этом устаевшее?
Конкатенация строк в двойных кавычках с переменными ничуть не лучше конкатенации строк с одинарными кавычками с переменными, всё та же дерьмовая каша на выходе.
Dropbox - средство синхронизации и бэкапа файлов.
#17 
GANDJUBAS Ганджубас04.12.12 12:15
GANDJUBAS
NEW 04.12.12 12:15 
в ответ voxel3d 04.12.12 09:13
От лукавого это. Мне такое месиво из данных, которое позволяют скриптовые языки, совсем не нравится.
#18 
voxel3d патриот04.12.12 13:03
voxel3d
NEW 04.12.12 13:03 
в ответ GANDJUBAS 04.12.12 12:15, Последний раз изменено 04.12.12 13:03 (voxel3d)
Для того, чтобы не было месива, придумали MVC/MVT, месиво это не проблема языков, это проблема специфики веба.
Dropbox - средство синхронизации и бэкапа файлов.
#19 
Murr патриот06.12.12 15:20
Murr
NEW 06.12.12 15:20 
в ответ project33 02.12.12 20:15
Ну а если нет - упаковать все щ отдельный класс со встроенным селектором и нужными пропертями...
П.С. Ох уж етот веб...
#20 
1 2 все