On Sat, Sep 7, 2013 at 10:36 AM, Nikita Nefedov <inefe...@gmail.com> wrote:

> On Sat, 07 Sep 2013 20:08:45 +0400, Michael John Burgess <
> mich...@mjburgess.co.uk> wrote:
>
>  On 07/09/2013 15:41, Levi Morrison wrote:
>>
>>> It looks nicer than Escaper::escapeJs(), Escaper::escapeHtml(), etc.
>>>>
>>>> Any comments?
>>>>
>>>
>>>
>>> Please, don't go down this route. You do not want one class to escape all
>>> kinds of data; delegate each type of escaping to its own class:
>>>
>>> JavaScriptEscaper->escape();
>>> PhpEscaper->escape();
>>> HtmlEscaper->escape();
>>> HtmlAttributeEscaper->escape()**;
>>>
>>> I should not have to defend this but I am willing to explain in more
>>> detail
>>> if someone would like me to.
>>>
>>>
>>
>> There doesnt need to be any object-oriented version for this problem.
>> It's a series of pure functions. Wraping them in one or more classes adds
>> nothing.
>>
>> Michael
>>
>>
> Hi,
>
> Wrapping those functions in methods means they can be extended in child
> classes. So suppose you have some library that takes object of type
> Spl_Escaper and uses its methods for escaping some data. Now if you will
> need some additional escaping you just need to make child class for
> Spl_Escaper and override methods which behavior you need to change. This
> can't be done with pure functions (in PHP).


You have a flawed understanding of good functional design. Instead of
directly calling the escaping function you would simply ask for a callable
and pass in the escaping function. Thus, you could use an alternative
escaping function at runtime.

The methods route is a poor choice. If we use classes at all, separate the
responsibility of each type of escaping to a separate class. Escaping JSON
and HTML code have little (possibly nothing) in common and do not belong in
the same class.

Reply via email to