<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Axel Jung &#187; php5</title>
	<atom:link href="http://www.ajung.de/tag/php5/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajung.de</link>
	<description>Privater Blog von Axel Jung aus Wiesbaden</description>
	<lastBuildDate>Tue, 22 Nov 2011 21:13:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Annotations und Reflektion</title>
		<link>http://www.ajung.de/2008/08/19/annotations-und-reflektion/</link>
		<comments>http://www.ajung.de/2008/08/19/annotations-und-reflektion/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 13:00:03 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Annotations]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[Reflektion]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=66</guid>
		<description><![CDATA[Annotations sind eigentlich nur Kommentarzeilen im Code. In PHP sind es die @ Einträge im PHPDoc. /** * @annotation wert **/ In letzter Zeit kommt es im Rahmen der Frameworks und Aspektorientierten Programmierung dazu das diese Kommentarzeilen dafür genutzt werden um Meta Informationen zu den Klassen oder Methoden hinzuzufügen. Diese Informationen haben aber nicht nur [...]]]></description>
			<content:encoded><![CDATA[<p>Annotations sind eigentlich nur Kommentarzeilen im Code. In PHP sind es die @ Einträge im PHPDoc.</p>
<pre>/**
 * @annotation  wert
 **/</pre>
<p>In letzter Zeit kommt es im Rahmen der Frameworks und Aspektorientierten Programmierung dazu das diese Kommentarzeilen dafür genutzt werden um Meta Informationen zu den Klassen oder Methoden hinzuzufügen.</p>
<p>Diese Informationen haben aber nicht nur informative Bedeutung, sondern auch eine technische Funktion. Beispielsweise kann man damit bestimmte Methoden als Webservice definieren und deren Zugriffsrechte steuern.</p>
<p>Das Framework <a href="http://www.amfphp.org/">AMFPHP</a> nutzt diese Funktion um bestimmte PHP Klassen für Flash zur Verfügung zu stellen. Man muss dafür den vorhandenen PHP Code nicht anpassen. Man fügt nur die Annotations hinzu und der Code bleibt sich seiner Verantwortung treu und kümmert sich nur um dass, was seine eigentliche Aufgabe ist.</p>
<p><a href="http://forge.typo3.org/projects/show/typo3-v5"><img class="alignright size-full wp-image-87" title="Typo3" src="http://www.ajung.de/wp-content/uploads/2008/08/logo-typo3.gif" alt="" width="123" height="34" />Typo3 5</a> wird in seinem neuen Framework auch sehr viel damit arbeiten, da die Entwickler von der Aspektorientieren Programmierung überzeugt sind.</p>
<p>Die meisten Frameworks verwenden diese Annoations im Zusammenhang mit Build Prozessen bei den der Code auf Annoations hin analysiert wird und die Funktionalität in den generierten Code &#8220;kompiliert&#8221; wird. Dies wird aufgrund der Performance gemacht und ist bei extremer Verwendung der Annoations auch ratsam.</p>
<p>Ich denke die Verwendung von Annoations ist sehr praktisch um macht den Code frei von unnötigen Ballast. Deshalb verwende ich auch in kleineren Projekten die Annoationsin Zusammenhang mit den neuen PHP5 Reflektion Funktionen.</p>
<p>Mit der Methode ReflectionMethod::getDocComment() lässt sich wunder der PHPDoc Inhalt auslesen.</p>
<p>In diesen Beispiel werden alle öffentlichen Setter Methoden aufgerufen die nicht die Annotation @not_in_session_sync beinhalten.</p>
<pre>$oReflectionClass = new ReflectionClass($oValueObjects_ProfilVO);
$aReflectionMethods = $oReflectionClass-&gt;getMethods();
foreach($aReflectionMethods as $oReflectionMethod){
   if($oReflectionMethod-&gt;isPublic() &amp;&amp; !ereg('@not_in_session_sync',$oReflectionMethod-&gt;getDocComment())){
      if(preg_match('/^set/',$oReflectionMethod-&gt;getName())){
         $oReflectionMethod-&gt;invoke($oValueObjects_ProfilVO,uniqid());
     }
  }
}</pre>
<p>Wahrscheinlich werden die Annotations Bestandteil der Sprache PHP. <a href="http://sebastian-bergmann.de/archives/488-Annotations-in-PHP.html">Sebastian Bergmann</a> setzt sich dafür ein.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/08/19/annotations-und-reflektion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

