> -----Original Message-----
> From: Tom Boutell [mailto:t...@punkave.com] 
> Sent: 09 April 2012 16:10
> To: PHP Internals
> Subject: [PHP-DEV] Object oriented page templates in PHP
> 
> There has been talk of making PHP a better templating 
> language. After all, it did start out there.
> 
> Folks have mentioned ideas like making it easier to output 
> escaped content, etc., but these are all hardcoded solutions. 
> And one of the biggest problems with PHP as a template 
> language is that when best practices change, you're stuck 
> with the helper functions you already have unless you start 
> globally replacing things. You can't really subclass or 
> override a function.
> 
> So even frameworks that provide "helper functions" in the 
> vein of Symfony 1 (which borrowed the idea from Rails) get 
> stuck when you want to alter the behavior.
> 
> Last year I did a project in a one-off MVC framework of my 
> own in which I decided I didn't want to be stuck with that, 
> so I made a rule:
> anything I wanted to call from the template had to be a 
> method of $this, the view object in whose render() method the 
> template file was require()'d.
> 
> This turned out to be a good thing. By writing <?php
> $this->escape($foo) ?>, I was able to benefit from whatever 
> implementation of 'escape' the subclass of view in question 
> decided to supply to me.
> 
> But of course it is very verbose and a templating language 
> that is too tedious to use won't get used.
> 
> What if PHP supported a short tag for calling a method of $this?
> 
> Then one could write:
> 
> <?@escape($foo) ?>
> 
> And 'escape' could be upgraded and modified as needed in an 
> object oriented way without the need to type <?php $this-> many
times.
> 
> A problem with this proposal is that it does not address 
> nesting. One still has to write:
> 
> <?@addLinks($this->escape($foo)) ?>
> 
> And it is fairly common to combine such operations.
> 
> So maybe I should just define a sublimetext shortcut for:
> 
> <?php $this->
> 
> And be done with it. (: It detracts from readability relative 
> to a template language like Twig, but I can always choose to use
Twig.
> 
> This would be notably easier if PHP, like Java and C++, 
> called methods of the current object implicitly without the 
> need for $this->. But of course that would be too great a 
> change as there would be no way to make existing code work 
> correctly again if it reasonably expected
> implode() to call the usual PHP function and not a method. 
> Plus it's probably a real pain to implement in general.
> 
> Thoughts?
> 

$fn = [
'escape' => function($text) { return htmlspecialchars($text,
ENT_QUOTES|ENT_HTML5, 'UTF-8'); },
...
];
extract($fn);

<?=$escape('blah')?>

Do I think it's a good idea?  Probably not in this case.

Jared



-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to