在PHP中的引用中解释PHP

I have this variable $url that I need to print inside a quoted HTML that it's inside a PHP if conditional.

<?php 
$url = $thumb['0']; 
if ( in_category( 'News' )) {
    //nothing here
} else {
    echo '<div class="image-holder"><img src="$url;" alt="Post photo" class="image-border"></div>';
}
?>

But src="$url;" is interpreted as src="$url;" in the HTML code. It does not interpret as a variable.

How can i solve that?

I like to seperate the business logic from the output. This, in combination with PHP's alternative syntax for control structures, keeps your HTML output clean and easily readable.

See this example:

<?php
// Do some things here
$url = $thumb['0'];

// Below this point we output HTML
// Only use simple control structures here, this keeps your HTML clean and easy to read
?>

<?php if (in_category('News')): ?>

<?php else: ?>
<div class="image-holder"><img src="<?php echo $url; ?>" alt="Post photo" class="image-border">
</div>
<?php endif; ?>

Since the first part of the if-statement is empty, you can simplify the code:

<?php if (!in_category('News')): ?>
<div class="image-holder"><img src="<?php echo $url; ?>" alt="Post photo" class="image-border">
</div>
<?php endif; ?>

Do this, (EDIT: simplified code)

<?php 
$url = $thumb['0']; 
if ( ! in_category( 'News' ) ) {?>
    <div class="image-holder">
       <img src="<?=$url?>" alt="Post photo" class="image-border" />
    </div>
<?}?>

Use double quotes and surround your variable in curley braces example

echo "This is my variable. It equals {$var}";

you can do like this

echo '<div class="image-holder"><img src="'.$url.'" alt="Post photo" class="image-border"></div>';

or

echo "<div class='image-holder'><img src='$url' alt='Post photo' class='image-border'></div>";

you can concatenate strings with a dot in php

e.g

echo "This"."is"."a"."sample";

likewise with variables:

    echo '<div class="image-holder"><img src="'.$url.'" alt="Post photo" class="image-border"></div>';

If you need to work with large portions of HTML and don't want to have to change from double to single quotes [technically disallowed by HTML spec], or escape all of the double quotes [pain in the butt], or constantly drop in and out of <?php ?> tags [ugly, hard to maintain], then use a HEREDOC. eg:

echo <<<_end_
<div class="image-holder"><img src="$url;" alt="Post photo" class="image-border"></div>
_end_;

Variables are expanded, no quotes need escaping, and all of your dreams will come true.

Alternatively, you can stick with a single-quoted string and get cozy with printf() which is a fantastically useful function in its own right. eg:

printf('<div class="image-holder"><img src="%s;" alt="Post photo" class="image-border"></div>', $url);

When working with strings in PHP, it's important to realize the distinction between single- and double-quoted strings.

  • Single-quoted strings are basically parsed as literal strings, regardless of what 'special' characters you might use. The only escape sequences are \' for a literal single quote and \\ for a literal backslash. PHP code is treated as simple text, and so are escape sequences like (the sequence for a unix newline). This is the format to use for simple string literals like 'Hello World!'.
  • Double-quoted strings are parsed completely, meaning is interpreted as a newline and $var is replaced with the value of the variable $var. So this is much more powerful, but you also have to think more about how your strings will be interpreted. If your interpreted php gets complicated (or is adjacent to non-php that might look like php), you can use braces to clarify your meaning.

Note that there are lots of reasons not to mix strings with php code. Often sprintf, heredoc, or simple concatenation (with .) make things much clearer, as suggested in several other answers.