<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Wenslijstje voor PHP6</title>
	<atom:link href="http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/feed" rel="self" type="application/rss+xml" />
	<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6</link>
	<description>Webdevelopment explored</description>
	<pubDate>Tue, 07 Feb 2012 08:08:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Wouter Tengeler</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-27617</link>
		<dc:creator>Wouter Tengeler</dc:creator>
		<pubDate>Thu, 08 Nov 2007 10:59:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-27617</guid>
		<description>Het idee achter overerving is nu juist dat je subklassen kunt toevoegen zonder dat de parentklasse daar iets van af weet. Dit heeft te maken met herbruikbaarheid, een belangrijk punt uit de OOP. Als je kennis over children in de parent zou opnemen, moet je voor iedere wijziging in de childklasse ook de parent aanpassen (tenminste als de interface wijzigt). Het idee is juist dat dat niet moet.

Polymorfisme is inderdaad het concept dat je een subklasse kunt benaderen alsof het een klasse van het type van de (een) parent is. 

Voorbeeld:

interface Writeable {
  public function save();
  public function load();
}

class Parent {
  ...
  public function doeJeDing() {
  }
  ...
}

class Child extends Parent implements Writeable {
  ...
}

// main code
$oDing = new Child();
// dit mag nu
doeIetsMetWriteables($oDing);
// maar dit ook
doeIetsMetParent($oDing);


// functies die polymoprfisme gebruiken
function doeIetsMetWriteables(Writeable $p_oObject) {
  $p_oObject-&#62;save();
}

function doeIetsMetParent(Parent $p_oObject) {
  // doe iets
}</description>
		<content:encoded><![CDATA[<p>Het idee achter overerving is nu juist dat je subklassen kunt toevoegen zonder dat de parentklasse daar iets van af weet. Dit heeft te maken met herbruikbaarheid, een belangrijk punt uit de OOP. Als je kennis over children in de parent zou opnemen, moet je voor iedere wijziging in de childklasse ook de parent aanpassen (tenminste als de interface wijzigt). Het idee is juist dat dat niet moet.</p>
<p>Polymorfisme is inderdaad het concept dat je een subklasse kunt benaderen alsof het een klasse van het type van de (een) parent is. </p>
<p>Voorbeeld:</p>
<p>interface Writeable {<br />
  public function save();<br />
  public function load();<br />
}</p>
<p>class Parent {<br />
  ...<br />
  public function doeJeDing() {<br />
  }<br />
  ...<br />
}</p>
<p>class Child extends Parent implements Writeable {<br />
  ...<br />
}</p>
<p>// main code<br />
$oDing = new Child();<br />
// dit mag nu<br />
doeIetsMetWriteables($oDing);<br />
// maar dit ook<br />
doeIetsMetParent($oDing);</p>
<p>// functies die polymoprfisme gebruiken<br />
function doeIetsMetWriteables(Writeable $p_oObject) {<br />
  $p_oObject-&gt;save();<br />
}</p>
<p>function doeIetsMetParent(Parent $p_oObject) {<br />
  // doe iets<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mathieu Kooiman</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-5038</link>
		<dc:creator>Mathieu Kooiman</dc:creator>
		<pubDate>Fri, 02 Mar 2007 06:41:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-5038</guid>
		<description>Je kunt overigens [ php ] [ /php ] gebruiken voor PHP code.</description>
		<content:encoded><![CDATA[<p>Je kunt overigens [ php ] [ /php ] gebruiken voor PHP code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mathieu Kooiman</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-5037</link>
		<dc:creator>Mathieu Kooiman</dc:creator>
		<pubDate>Fri, 02 Mar 2007 06:41:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-5037</guid>
		<description>Het idee van polymorfisme is dat je de Childs kunt aanspreken alsof ze hun Parent waren. De parent is nml de lowest common denominator.

Om even verder op jouw idee te bouwen:

[php]

class ModelProcessor
{
  function Process(DP_Model $model)
  {
    $model-&gt;delete(5);
  }
}

[/php]

Op de manier kun je alle instanties en childs van DP_Model aan ModelProcess::Process() voeren. Alle childs van DP_Model hebben immers de methodes die DP_Model aanbiedt.

Ik ben sowieso niet zo'n fan van statische methodes zoals jij ze gebruikt aangezien je op deze manier een stuk flexibiliteit inlevert. Want, wanneer je User::add() gebruikt, is je code hard gebonden aan de user klasse en dat is niet altijd gewenst.</description>
		<content:encoded><![CDATA[<p>Het idee van polymorfisme is dat je de Childs kunt aanspreken alsof ze hun Parent waren. De parent is nml de lowest common denominator.</p>
<p>Om even verder op jouw idee te bouwen:</p>
<div class="igBar"><span id="lphp-1"><a href="#" onclick="javascript:showPlainTxt('php-1'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-1">
<div class="syntax-highlite">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> ModelProcessor</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">function</span> Process<span class="br0">&#40;</span>DP_Model <span class="re0">$model</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$model</span>-&gt;<span class="me1">delete</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Op de manier kun je alle instanties en childs van DP_Model aan ModelProcess::Process() voeren. Alle childs van DP_Model hebben immers de methodes die DP_Model aanbiedt.</p>
<p>Ik ben sowieso niet zo'n fan van statische methodes zoals jij ze gebruikt aangezien je op deze manier een stuk flexibiliteit inlevert. Want, wanneer je User::add() gebruikt, is je code hard gebonden aan de user klasse en dat is niet altijd gewenst.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Koen Speelmeijer</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-4980</link>
		<dc:creator>Koen Speelmeijer</dc:creator>
		<pubDate>Thu, 01 Mar 2007 14:58:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-4980</guid>
		<description>"Dat gaat uiteraard niet gebeuren. Het idee is juist dat een overerfende klasse de parent uitbreidt. En niet dat de parent op wijzigingen in de childs bouwt."

Hier ben ik het trouwens niet mee eens omdat bij 'niet-statisch' klassen dit wel zo gebeurd. Dit is volgens mij hetgene waar polymorfisme op gebasseerd is als ik me niet vergis. Dat de parent aan child members kan.</description>
		<content:encoded><![CDATA[<p>"Dat gaat uiteraard niet gebeuren. Het idee is juist dat een overerfende klasse de parent uitbreidt. En niet dat de parent op wijzigingen in de childs bouwt."</p>
<p>Hier ben ik het trouwens niet mee eens omdat bij 'niet-statisch' klassen dit wel zo gebeurd. Dit is volgens mij hetgene waar polymorfisme op gebasseerd is als ik me niet vergis. Dat de parent aan child members kan.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Koen Speelmeijer</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-4979</link>
		<dc:creator>Koen Speelmeijer</dc:creator>
		<pubDate>Thu, 01 Mar 2007 14:55:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-4979</guid>
		<description>Een voorbeeldje, bij een Model klasse die geen databasekolom maar een databasetabel voorstelt:

Ik maak hier gebruik van de fictieve constante 'child'.
(even aannemen dat self::$_db is geset in een soort van 'init' methode)
----
class DP_Model {
    public static function add($data) {
        self::_filter($data);        self::$_db-&#62;insert(child::$_table, $data);
    }

    public static function update($data, $where, $quoteInto = array()) {
        self::_filter($data);
self::$_db-&#62;updata(child::$_table, $data, $where, $quoteInto);
    }

    public static function delete($id) {
        self::_filter($data);        
        if(child::$_hasDeleteColumn) {
            self::$_db-&#62;update(child::$_table, array('deleted' =&#62; 1), 'id = ?', $id);
        } else {
            self::$_db-&#62;delete(child::$_table, $id);
    }
 
    public static function recover($id) {
        if(child::$_hasDeletedColumn) {
            self::$_db-&#62;update(child::$_table, array('deleted' =&#62; 0), 'id = ?', $id);
        } else {
            // error throwen of iets dergelijks
    }

    protected static function _filter(&#38;$data) {
        $data = array_intersect_key($data, array_flip(child::$_columns);
    }
}
-----

En dan zal je heel toffe klassen hiervan kunnen extenden:

-----
class User extends DP_Model {
    protected $_table= "user";
    protected $_hasDeletedColumn = true;
    protected $_columns = array('username', 'first_name', 'last_name', 'email', ...);
}

class ForumPost extends DP_Model {
    protected $_table = "forum_posts";
    protected $_hasDeletedColumn = true;
    protected $_columns = array('owner', 'body_id', 'created');
}
-------

==&#62;

-----
User::add(array('username' =&#62; 'a username', 'first_name' =&#62; 'Koen', 'last_name' =&#62; 'Speelmeijer', 'email' =&#62; '...', 'aNonExistantColumn' =&#62; 'value');
// die laatste wordt dan genegeerd
ForumPost::delete(5);
// enz enz enz
-----

Nu moet ik het zo doen:
----
User::instance()-&#62;add(....);
----

Is er trouwens een ubb code voor codes, omdat het er nu niet uitziet.
Hier heb ik ook even de code gepost voor de uitleining:
http://v2.pastebin.be/188</description>
		<content:encoded><![CDATA[<p>Een voorbeeldje, bij een Model klasse die geen databasekolom maar een databasetabel voorstelt:</p>
<p>Ik maak hier gebruik van de fictieve constante 'child'.<br />
(even aannemen dat self::$_db is geset in een soort van 'init' methode)<br />
----<br />
class DP_Model {<br />
    public static function add($data) {<br />
        self::_filter($data);        self::$_db-&gt;insert(child::$_table, $data);<br />
    }</p>
<p>    public static function update($data, $where, $quoteInto = array()) {<br />
        self::_filter($data);<br />
self::$_db-&gt;updata(child::$_table, $data, $where, $quoteInto);<br />
    }</p>
<p>    public static function delete($id) {<br />
        self::_filter($data);<br />
        if(child::$_hasDeleteColumn) {<br />
            self::$_db-&gt;update(child::$_table, array('deleted' =&gt; 1), 'id = ?', $id);<br />
        } else {<br />
            self::$_db-&gt;delete(child::$_table, $id);<br />
    }</p>
<p>    public static function recover($id) {<br />
        if(child::$_hasDeletedColumn) {<br />
            self::$_db-&gt;update(child::$_table, array('deleted' =&gt; 0), 'id = ?', $id);<br />
        } else {<br />
            // error throwen of iets dergelijks<br />
    }</p>
<p>    protected static function _filter(&amp;$data) {<br />
        $data = array_intersect_key($data, array_flip(child::$_columns);<br />
    }<br />
}<br />
-----</p>
<p>En dan zal je heel toffe klassen hiervan kunnen extenden:</p>
<p>-----<br />
class User extends DP_Model {<br />
    protected $_table= "user";<br />
    protected $_hasDeletedColumn = true;<br />
    protected $_columns = array('username', 'first_name', 'last_name', 'email', ...);<br />
}</p>
<p>class ForumPost extends DP_Model {<br />
    protected $_table = "forum_posts";<br />
    protected $_hasDeletedColumn = true;<br />
    protected $_columns = array('owner', 'body_id', 'created');<br />
}<br />
-------</p>
<p>==&gt;</p>
<p>-----<br />
User::add(array('username' =&gt; 'a username', 'first_name' =&gt; 'Koen', 'last_name' =&gt; 'Speelmeijer', 'email' =&gt; '...', 'aNonExistantColumn' =&gt; 'value');<br />
// die laatste wordt dan genegeerd<br />
ForumPost::delete(5);<br />
// enz enz enz<br />
-----</p>
<p>Nu moet ik het zo doen:<br />
----<br />
User::instance()-&gt;add(....);<br />
----</p>
<p>Is er trouwens een ubb code voor codes, omdat het er nu niet uitziet.<br />
Hier heb ik ook even de code gepost voor de uitleining:<br />
<a href="http://v2.pastebin.be/188" rel="nofollow">http://v2.pastebin.be/188</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mathieu Kooiman</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-4931</link>
		<dc:creator>Mathieu Kooiman</dc:creator>
		<pubDate>Thu, 01 Mar 2007 07:05:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-4931</guid>
		<description>Koen bedoelt juist iets anders. Hij wil wanneer hij een overervende klasse heeft gemaakt vanuit de Parent een nieuwe waarde van de Child uitlezen. Een soort bi-directionele inheritance.

Dat gaat uiteraard niet gebeuren. Het idee is juist dat een overerfende klasse de parent uitbreidt. En niet dat de parent op wijzigingen in de childs bouwt. 

Ik vraag me dan ook af in wat voor situatie je dit uberhaupt zou willen gebruiken :)</description>
		<content:encoded><![CDATA[<p>Koen bedoelt juist iets anders. Hij wil wanneer hij een overervende klasse heeft gemaakt vanuit de Parent een nieuwe waarde van de Child uitlezen. Een soort bi-directionele inheritance.</p>
<p>Dat gaat uiteraard niet gebeuren. Het idee is juist dat een overerfende klasse de parent uitbreidt. En niet dat de parent op wijzigingen in de childs bouwt. </p>
<p>Ik vraag me dan ook af in wat voor situatie je dit uberhaupt zou willen gebruiken :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sebastiaan Stok</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-4893</link>
		<dc:creator>Sebastiaan Stok</dc:creator>
		<pubDate>Wed, 28 Feb 2007 19:12:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-4893</guid>
		<description>Lees de handlijding is man :)
Kan dus wel!

Als je een class overneemd dan worden die parent functies onderdeel van het child.

Dus als je op de child een functie uitvoerd van die komt van de parent dan ziet die functie gewoon de parent en child als een.
Alleen is het zo dat als de child een var of functie heeft die het zelfde heet als die van de parrent dan word die van de parent overschrijven maar kan je nog wel met parent:: aanroepen.

Of zo iets, in het donken typen met een zwarttoetsennboord naar niet samen :)</description>
		<content:encoded><![CDATA[<p>Lees de handlijding is man :)<br />
Kan dus wel!</p>
<p>Als je een class overneemd dan worden die parent functies onderdeel van het child.</p>
<p>Dus als je op de child een functie uitvoerd van die komt van de parent dan ziet die functie gewoon de parent en child als een.<br />
Alleen is het zo dat als de child een var of functie heeft die het zelfde heet als die van de parrent dan word die van de parent overschrijven maar kan je nog wel met parent:: aanroepen.</p>
<p>Of zo iets, in het donken typen met een zwarttoetsennboord naar niet samen :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Koen Speelmeijer</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-4754</link>
		<dc:creator>Koen Speelmeijer</dc:creator>
		<pubDate>Mon, 26 Feb 2007 16:42:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-4754</guid>
		<description>Ik poste een voorbeeld code maar die werd blijkbaar genegeerd. Nog ens proberen:

-----
class ParentClass {
     public static function calledViaChild() {
         return child::$_protectedVar;
     }
}
class ChildClass1 extends ParentClass {
     public static $_protectedVar = "foo";
}
class ChildClass2 extends ParentClass {
     public static $_protectedVar = "bar";
}

echo ChildClass1::calledViaChild(); // foo
echo ChildClass2::calledViaChild(); // bar
------------
Zoiets is momenteel nog niet mogelijk voor zover ik weet.</description>
		<content:encoded><![CDATA[<p>Ik poste een voorbeeld code maar die werd blijkbaar genegeerd. Nog ens proberen:</p>
<p>-----<br />
class ParentClass {<br />
     public static function calledViaChild() {<br />
         return child::$_protectedVar;<br />
     }<br />
}<br />
class ChildClass1 extends ParentClass {<br />
     public static $_protectedVar = "foo";<br />
}<br />
class ChildClass2 extends ParentClass {<br />
     public static $_protectedVar = "bar";<br />
}</p>
<p>echo ChildClass1::calledViaChild(); // foo<br />
echo ChildClass2::calledViaChild(); // bar<br />
------------<br />
Zoiets is momenteel nog niet mogelijk voor zover ik weet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mathieu Kooiman</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-4719</link>
		<dc:creator>Mathieu Kooiman</dc:creator>
		<pubDate>Mon, 26 Feb 2007 07:26:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-4719</guid>
		<description>@Koen: in wat voor context zou je dat willen gebruiken dan? Klinkt eerder als iets waar een design verbeterd kan worden :)</description>
		<content:encoded><![CDATA[<p>@Koen: in wat voor context zou je dat willen gebruiken dan? Klinkt eerder als iets waar een design verbeterd kan worden :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mathieu Kooiman</title>
		<link>http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6/comment-page-1#comment-4718</link>
		<dc:creator>Mathieu Kooiman</dc:creator>
		<pubDate>Mon, 26 Feb 2007 07:25:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.scriptorama.nl/algemeen/wenslijstje-voor-php6#comment-4718</guid>
		<description>Stephan Schmidt heeft er inmidddels nog 1 gepost: 

http://www.stubbles.org/archives/8-My-wishlist-for-PHP-6,-pt3-Annotations.html</description>
		<content:encoded><![CDATA[<p>Stephan Schmidt heeft er inmidddels nog 1 gepost: </p>
<p><a href="http://www.stubbles.org/archives/8-My-wishlist-for-PHP-6,-pt3-Annotations.html" rel="nofollow">http://www.stubbles.org/archives/8-My-wishlist-for-PHP-6,-pt3-Annotations.html</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>

