tags:

views:

169

answers:

8

Hi

So I've always developed PHP pages like this: <?php goes at the top, ?> goes at the bottom, and all the HTML gets either print()ed or echo()ed out. Is that slower than having non-dynamic html outputted outside of <?php ?> tags? I can't seem to find any info about this.

Thanks!
--Mala

UPDATE: the consesus seems to be on doing it my old way being hard to read. This is not the case if you break your strings up line by line as in:

print("\n".
"first line goes here\n".
"second line goes here\n".
"third line");

etc. It actually makes it a lot easier to read than having html outside of php structures, as this way everything is properly indented. That being said, it involves a lot of string concatenation.

+2  A: 

I don't know if it's slower or faster, but (in my opinion) it makes the code a lot more difficult to understand. Which I guess is why I don't typically do it.

Eric Petroelje
+2  A: 

It is almost the same from a performance point of view. I would set the focus on the readability of the code. If you have a performance problem, figure out the bottleneck and cache it.

powtac
+5  A: 

The difference in speed is probably negligible, however, when print()ing out all of your HTML with PHP, the code can get very ugly, and makes it much harder to read than if you just have plain HTML.

Edit: Also, if you're are print()ing out static HTML that doesn't change, really what is the point? It gives you no added benefit.

Pros

  • None that I can see

Cons

  • Code that is hard to read

  • One more step in processing for the PHP engine, which although probably not noticeable, it is an extra step.

jaywon
+8  A: 

I'm not sure about speed, but it's typically best practice to separate dynamic elements and the display of them.

Check out a framework like CodeIgniter: This has a "controller" and a "model" that grab data, sort it or do whatever you like with it, and then feed it to a "view" (some sort of template).

This paradigm is called MVC, and is a really, really valuable thing to learn about. I've found its chief advantage to be easier-to-maintain code. I don't end up with a monster document that I have to re-learn each time I approach it.

Resources:

Alex Mcp
+1 for MVC. I was going to offer this same advice, and now I can skip that part. If you're doing anything bigger than a one page quick PHP project, you should be thinking about MVC.
Jeremy Morgan
Thanks, I'll give that a try :)
Mala
Mala: Watch their videos. Very inspiring-ly efficient, and give you a god feel for the syntax.
Alex Mcp
+3  A: 

The speed is negligible - trust me, this will not be your bottleneck.

Along with any other MVC framework, you might want to check out a simple templating system, such as Smarty, which separates your PHP logic from your HTML and also does caching.

philfreo
A: 

Maybe not the best practice, but I choose to mix and match print() statements. For large chunks of layout code, I don't use print(), but if I'm rendering a complex if/else or for/while block and I'd be exiting the PHP block every other word, then I'll print out the non-dynamic text with the dynamic text.

tridium
A: 

Performance is very negligible at best. You can create a page, and put a timer on it. (Here is a tutorial on creating a script timer)

Output the exact same data both ways, and measure it with as many samplings as you can get, this should roughly tell you which is faster. I'm guessing very close to the same.

I have seen a lot of these pages with PHP embedded inside HTML, and I don't like it. As Alex Mcp suggested you should be thinking about a MVC model.

The problem with scripts embedded into html is the flow control and logic aren't easy to read, and there are some wierd problems that occur here and there. The best solution for me is usually to use Smarty or the Zend Framework to create template pages and then swap the data that goes in and out. Much easier to manage in the long run.

Jeremy Morgan
+1  A: 

Is that slower than having non-dynamic html outputted outside of <?php ?> tags?

Well yes, it is... marginally. But that's not really the issue: it's all about the readability.

this way everything is properly indented

Your example isn't indented at all, which is fairly typical for the print-heavy, PHP I've unfortunately had to maintain!

Try this approach to keeping good, consistent indentation:

<ul>
    <?php
        // block of arbitrary code blah blah
        //
        $conditions= get_conditions_from_request();
        $isadmin= $user->privileges>=PRIV_ADMIN;
    ?>
    <?php foreach (select_things($conditions) as $thing) { ?>
        <li>
            <strong><?php h($thing->title); ?></strong>
            <?php if ($isadmin) { ?>
                <a href="/editthing.php?id=<?php u($thing->id); ?> (Edit) </a>
            <?php } ?>
            <?php h($thing->description); ?>
        </li>
    <?php } ?>
</ul>

(This presumes a function h that calls echo htmlspecialchars and u that does echo htmlspecialchars urlencode. Getting this escaping stuff right is essential to having a secure site, and is something that's almost always wrong in print-based PHP, as it tends to use "blah $var blah"-style templating without any escaping at all.)

bobince