|
|
|
|
|
для: nikita2206
(29.09.2010 в 21:41)
| | А чего вы хотите передать классу - константы как руководство к действию, или все таки координаты? | |
|
|
|
|
|
|
|
для: Trianon
(30.09.2010 в 08:11)
| | >switch вообще редко где можно применить оптимально, красиво и со смыслом
здесь не соглашусь.
Например если двумя из битов как-раз и передаётся число 0-3, switch
может предоставить больше гибкости в обработке на основе именно этих двух бит. В switch есть то чего нет в if-elseif-else, возможность один блок использовать сразу в двух и более случаях.
например:
switch(x)
case 0:
echo 0
case 1:
echo 1;
break;
покажет 01 если 0 или 1 если 1
с if-else получится так
if (x=0) echo '01';
elseif (x=1) echo 1;
т.е в первом блоке приходится выполнять то-же что выполняется могло-бы выполниться во втором.
Не слишком частые случаи конечно, но хоть какое-то утешение отсутствию goto в php :)
10:43
>причем SQL.
там просто о аналогичном типе данных. с аналогичными
const Down = 1; // 0000001
const Middle = 2; // 0000010
// 0000100 ...... | |
|
|
|
|
|
|
|
для: heed
(30.09.2010 в 00:07)
| | Спасибо, я правда не понял причем SQL. Я вот думаю, может можно выкрутиться как-то с четыричной системой счисления, у меня ведь всего два параметра и у каждого четыре позиции возможных. | |
|
|
|
|
|
|
|
для: Trianon
(30.09.2010 в 08:11)
| | Ясно, спасибо. | |
|
|
|
|
|
|
|
для: nikita2206
(29.09.2010 в 22:49)
| | выбор значений констант подразумевает, что одновременно могут оказаться переданными сразу несколько флагов, а значит switch здесь неприменим. В противном случае константы были бы выбраны последовательно нарастающими целыми числами (а не последовательными двоичными разрядами.)
switch вообще редко где можно применить оптимально, красиво и со смыслом. | |
|
|
|
|
|
|
|
для: nikita2206
(29.09.2010 в 22:49)
| | Можете поверить на слово, со switch это будет ещё некрасивее :)
switch ($where1 & ImageLib::HIghWord) {
case 1 && ($where2 & 'ImageLib::Up':
case 1 && ($where2 & ImageLib::Down):
............
}
Такая передача параметров просто как тип данных mysql SET(1,2,4,8,16) (64 кажется раза не 32)
FIND IN SET это простое \xxx & SET
, и так-же человеко-понятные ярлыки ещё нужно навешивать чтобы не забывать цифры.
ну можете ещё проверить одно из двух или оба значения, типа 3&'любые данные' в любом случае вернёт число от 0 до 3
Зато бывают случаи что даже хоть и всё в цифрах читать и делать заметно удобнее , меньше букв :) попробуйте сделать сразу например 15 действий, а потом в зависимости от успешности выполнения определённых совокупностей этих действий построить логику.
получите много повторяющихся if ($first ==1 && $next==1 && ... много раз) ,
цифры с комментариями будет заметно компактнее.
И просто компактность данных. | |
|
|
|
|
|
|
|
для: sl1p
(29.09.2010 в 22:47)
| | Не красиво выглядит вот такое засилие ифов.
<?php
if ($where & ImageLib::Up) {
echo 'ImageLib::Up';
} elseif ($where & ImageLib::Down) {
echo 'ImageLib::Down';
} elseif ($where & ImageLib::Middle) {
echo 'ImageLib::Middle';
} elseif ($where & ImageLib::YCoord) {
echo 'ImageLib::YCoord';
}
|
| |
|
|
|
|
|
|
|
для: nikita2206
(29.09.2010 в 22:44)
| | чем не красиво-то?) | |
|
|
|
|
|
|
|
для: Trianon
(29.09.2010 в 22:38)
| | Это единственный вариант? Может можно покрасивее как-то сделать?
В любом случае, спасибо за ответ. | |
|
|
|
|
|
|
|
для: nikita2206
(29.09.2010 в 22:35)
| |
if($where & ImageLib::Down) ...
|
| |
|
|
|
|