Оператор PHP if/else

Я полный новичок в PHP, но обнаружил, что это может быть очень полезно. Как я могу написать следующий оператор в PHP:

Если идентификатор тела = "home", вставьте какой-нибудь html, например.

<h1>I am home!</h1>

В противном случае вставьте этот html:

<p>I'm not home.</p>

Спасибо!


person lnvrt    schedule 05.11.2010    source источник


Ответы (6)


Выполнение этого с помощью собственных шаблонов PHP:

<?php if ($bodyID==='home') { ?>
    <h1>I am home!</h1>
<?php } else { ?>
    <p>I'm not home!</p>
<?php } ?>
person bobince    schedule 05.11.2010
comment
В 92K вы должны знать свои операторы сравнения, сэр, всегда должны использовать == в качестве проверки на равенство, а не Identical, вы не знаете, использует ли OP объекты, которые используют __tostring()? - person RobertPitt; 05.11.2010
comment
Почему я хочу, чтобы объект, использующий __tostring(), был равен? Казалось бы, это вызовет больше ошибок, чем решит. (Лично я бы предпочел исключение, если я сравниваю строку с не строкой, так как это почти наверняка означало бы, что я сделал ошибку.) Между тем, оператор равенства несет с собой очень плохой багаж (например, string-as -числовое сравнение), чего я определенно не хочу. Компаратор, который чаще всего оказывается правильным, — это ===. - person bobince; 05.11.2010
comment
Спасибо бобинка. Я пробовал это, но это тоже не работает для меня. Я вставляю его в файл шаблона header.php. Есть ли что-то, что я упускаю? - person lnvrt; 05.11.2010
comment
Что вы получаете на выходе? Что на самом деле содержит $bodyID? Он хоть выполняется? - person bobince; 05.11.2010
comment
Идентификатор тела — ‹body id=home› со всем HTML-кодом. Другие страницы имеют ‹body class=internal›, и все они считываются из одного и того же файла header.php, в который я вставляю ваш код. Вывод, который я получаю из вашего кода, одинаков на всех страницах, меня нет дома. - person lnvrt; 05.11.2010
comment
О, вы не можете прочитать значение атрибута <body id="...">, сгенерированного шаблоном PHP, из другого шаблона PHP. Вам нужно будет явно установить идентификатор в переменной $bodyID= 'home'; перед включением шаблона заголовка. - person bobince; 05.11.2010
comment
ОК, простите мое невежество! Теперь, если я смогу заставить эти php-идентификаторы работать, я уверен, что этот метод должен работать. Спасибо за вашу помощь! - person lnvrt; 05.11.2010

Вы можете попробовать использовать это:

$html = '';
if ( $body_id === 'home' )
{
    $html .= '<h1>I am home!</h1>';
}
else
{
    $html .= '<p>I\'m not home.</p>';
}

echo $html;

Это будет отображать html-код в зависимости от переменной $body_id и того, что она содержит.

person Etienne Marais    schedule 05.11.2010
comment
в зависимости от того, насколько новичок OP, вы, вероятно, захотите использовать ‹?php в начале файла. - person Oxyrubber; 05.11.2010
comment
Всегда рекомендуется назначать HTML-код переменной и выгружать его сразу после завершения выполнения, но это спорный вопрос для разных типов вывода. - person Etienne Marais; 05.11.2010
comment
@Hannes Рекомендуется всегда вводить проверку в операторе if. Это поддерживает ваш код в стандарте и никоим образом не влияет на производительность такого маленького скрипта. - person Etienne Marais; 05.11.2010
comment
@Hannes: оператор двойного равенства сумасшедший и совершенно неудовлетворительный. '123'==' 123'. @etbal: я бы не стал помещать выходные данные HTML в строки. Вы просто даете себе дополнительный уровень бегства от беспокойства. PHP — это язык шаблонов, и его тоже можно использовать. - person bobince; 05.11.2010
comment
@etbal @bobince, но в данном конкретном случае проверка типов не имеет смысла и фактически при определенных условиях может даже сломать код, пожалуйста, рассмотрите этот пример pastebin.com/01TCMebV, если вы отметите $body_id == 'home' для всех интенсивных и целевых действий, $body_id должен быть строкой - person Hannes; 05.11.2010
comment
@Hannes: я специально не хочу, чтобы экземпляры пользовательских классов успешно сравнивались со строкой. Если я получил пользовательский объект в том, что, как я ожидаю, будет строковой переменной, это ошибка, и я хочу, чтобы он не работал. В 99% случаев, когда я сравниваю строковое значение, мне нужно простое сравнение строк, как и в подавляющем большинстве других языков программирования. PHP == - это не сравнение строк, это сумасшедшая шизофреническая вещь, которая может пойти не так в этом конкретном случае, но определенно будет в других. Это ненадежно, и его использование должно быть исключением, а не правилом. - person bobince; 05.11.2010

Вы можете использовать команду переключения следующим образом:

switch($body)
{
    case 'home': //$body == 'home' ?
        echo '<h1>I am home!</h1>';
    break;

    case 'not_home':
    default:
        echo '<p>I'm not home.</p>';
    break;
}

default означает, что если $body не соответствует ни одному из значений case, то будет использовано это значение, default является необязательным.

Другой способ, как вы говорите, if/else, но если на страницах шаблона/просмотра вы должны попробовать и использовать так:

<?php if ($body == 'home'):?>
    <h1>I am home!</h1>
<?php else:?>
    <p>I'm not home!</p>
<?php endif; ?>
person RobertPitt    schedule 05.11.2010
comment
Спасибо, последний фрагмент кода выглядит самым чистым, но я не могу заставить его работать. Я вставляю его в файл header.php... Я что-то упускаю? - person lnvrt; 05.11.2010
comment
Обновите код, который у вас есть на данный момент, и выведите $body, чтобы увидеть, что он содержит? - person RobertPitt; 05.11.2010
comment
Прости, Роберт, я тебя не понимаю? - person lnvrt; 05.11.2010
comment
Если вы обновите свой квест кодом, который вы пытаетесь исправить, мы можем взглянуть на него. - person RobertPitt; 05.11.2010

Предполагая, что $bodyID является переменной:

<?php 
    if ($bodyID==='home') {
        echo "<h1>I am home!</h1>";}
    else {
        echo "<p>I'm not home!</p>";}
?>
person Leah    schedule 30.05.2017

Лично я думаю, что лучший способ сделать это без обновления и без необходимости устанавливать переменную (например, $body или что-то в этом роде) — это использовать код javascript, потому что «связь» между JS и PHP — это односторонняя связь.

<script language="javascript">
<!--
if( document.body.id === "home" ){
    window.document.write("<h1>I am home!</h1>") ;
}
else{
    window.document.write("<p>I'm not home!</p>") ;
}
-->
</script>

в противном случае вы можете создать форму, а затем взять значение body.id с помощью функции $_GET... Это всегда зависит от того, что вам нужно сделать после того, как вы теперь получите значение body.id.

Надеюсь, это будет полезно и ясно.

person iDiot    schedule 05.11.2010
comment
Спасибо, iDiot, я хотел бы использовать javascript! В этом клиенте, который у меня есть, строго нет js, так что это сложно! - person lnvrt; 05.11.2010

можно попробовать следующим образом:

$body_id = "home";

if ($body_id == "home") {
    echo "I am home!";
} else {
    echo "I am not home!";
}

or

$body_id = "home"; 

if (strcmp($body_id, "home") !== 0) { 
    echo 'I am not home!'; 
} 
else { 
    echo 'I am home!'; 
} 

Ссылка:

https://www.geeksforgeeks.org/string-comparison-using-vs-strcmp-in-php/
person SM Imtiaz Hussain    schedule 03.04.2019