Отображение объекта PHP в зависимости от дня недели - PullRequest
1 голос
/ 23 июня 2011

Таким образом, у меня есть часы работы, настроенные на 7 различных объектов каждый день недели.Я хотел иметь возможность отображать в шапке часы этого бизнеса за тот день, который он есть на данный момент.Настройте это так, но ничего не выплюнет

<?php
    $d=date("D");
    if ($d=="Mon")
    echo <?php echo of_get_option('monday', 'no entry'); ?>;
    elseif ($d=="Tue")
    echo <?php echo of_get_option('tuesday', 'no entry'); ?>;
    elseif ($d=="Wed")
    echo <?php echo of_get_option('wednesday', 'no entry'); ?>;
    elseif ($d=="Thu")
    echo <?php echo of_get_option('thursday', 'no entry'); ?>;
    elseif ($d=="Fri")
    echo <?php echo of_get_option('friday', 'no entry'); ?>;
    elseif ($d=="Sat")
    echo <?php echo of_get_option('saturday', 'no entry'); ?>;
    elseif ($d=="Sun")
    echo <?php echo of_get_option('sunday', 'no entry'); ?>;
    else
    echo "Have a nice day!";
?>

Ответы [ 5 ]

6 голосов
/ 23 июня 2011

В вашем if/else вам вообще не нужен else.Посмотрите руководство для date.Единственный способ, которым date вернет false, - это когда вы передаете нечисловую метку времени для второго аргумента.Вы этого не делаете, поэтому date все равно вернет один из дней.

Но вместо использования if/else или switch/case (что было бы то же самое), почему бы вам просто не использовать

echo of_get_option(strtolower(date('l')), 'no entry');

Позвонив по номеру date с l, вы получите название дня.strtolower сделает все это строчными.То, что вы там делаете, является излишним.Одиночная строка выше эквивалентна всему фрагменту, который вы показываете в своем вопросе.

В обозначении какого типа имя функции of_get_option?Что такое of?Это стоит для офиса?И если да, то почему это функция, а не метод объекта Office?В конце концов, вы сказали, что используете объекты.И почему он говорит get_option, когда предполагается, что отображает рабочее время ?Не должно ли название быть getOfficeHoursOnDay($day) или даже лучше, displayOfficeHoursOnDay($listRenderer, $day).Постарайтесь сделать свой код более выразительным и читаемым, а также переместить обязанности туда, где они должны.

2 голосов
/ 23 июня 2011

Вам, конечно, не нужно открывать другие теги PHP, если они уже открыты.


Хорошо, что решение найдено, но позвольте мне опубликовать версию, которая немного более читабельна.и нет ненужного повторения.Он использует массив для целей отображения.

<?php
    $d=date("D");
    $mapping=array(
        "Mon" => "monday",
        "Tue" => "tuesday",
        "Wed" => "wednesday",
        ...
    );

    if (array_key_exists($d, $mapping)) {
        echo of_get_option($mapping[$d], 'no entry');
    }
    else {
        echo "Have a nice day!";
    }
?>
1 голос
/ 23 июня 2011

Я бы предложил вообще отказаться от использования строк. Date возвращает локализованные строки в зависимости от настроек локали. Таким образом, вы получаете волшебную нить, которая не так волшебна.

Вместо этого используйте числовой день недели:

 of_get_option(date('w'));

Вам, конечно, нужно изменить функцию, чтобы принять ее. Но его легче понять, он более портативный и ИМХО чище ...

1 голос
/ 23 июня 2011

Попробуйте использовать переключатель и удалите лишние теги из кода, например

$d=date("D");
switch ($d) {
case "Mon":
echo of_get_option('monday', 'no entry');
break;
case "Tue":
echo of_get_option('tuesday', 'no entry');
break;
default:
echo "Have a nice day!";
}
0 голосов
/ 23 июня 2011

Я предполагаю, что у вас нет проблем с вложенными тегами php, это будет слишком очевидно.

Поскольку условия верны, вы должны проверить функцию of_get_option ().Как это работает, что-нибудь возвращает?Проверьте с помощью var_dump ().

Кроме того, было бы намного чище использовать

date("N")

, чтобы вы получали числа от 1 до 7 для рабочих дней.

edit: OkВ ответ на ваш комментарий, я думаю, вы скопировали эти php-tag-части откуда-то.Поэтому, пожалуйста, попробуйте:

<?php
    $d=date("D");
    if ($d=="Mon")
      echo of_get_option('monday', 'no entry');
    elseif ($d=="Tue")
      echo of_get_option('tuesday', 'no entry');
    elseif ($d=="Wed")
      echo of_get_option('wednesday', 'no entry');
    elseif ($d=="Thu")
      echo of_get_option('thursday', 'no entry');
    elseif ($d=="Fri")
      echo of_get_option('friday', 'no entry');
    elseif ($d=="Sat")
      echo of_get_option('saturday', 'no entry');
    elseif ($d=="Sun")
      echo of_get_option('sunday', 'no entry');
    else
      echo "Have a nice day!";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...