<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>DeDu's Code</title>
	
	<link>http://code.dedu.ch</link>
	<description />
	<lastBuildDate>Fri, 27 Apr 2012 14:47:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DedusCode" /><feedburner:info uri="deduscode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>DedusCode</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Variable Variablen</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/zknmnPSLE-k/</link>
		<comments>http://code.dedu.ch/?p=357#comments</comments>
		<pubDate>Tue, 10 Apr 2012 07:40:56 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=357</guid>
		<description><![CDATA[Jeder Applikationsentwickler kennt sie: Konstanten, Variablen, Instanzen und so weiter. Doch was sind &#8220;variable Variablen&#8221;? Diese möchte ich euch heute vorstellen. Und falls ihr diese schon kennt, sie euch wieder ins Gedächtnis rufen&#8230; Variablen heissen Variablen weil ihr Wert variabel ist. Er sich also ständig ändern kann. Der Bezeichner der Variable bleibt aber immer gleich. [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder Applikationsentwickler kennt sie: Konstanten, Variablen, Instanzen und so weiter. Doch was sind &#8220;variable Variablen&#8221;? Diese möchte ich euch heute vorstellen. Und falls ihr diese schon kennt, sie euch wieder ins Gedächtnis rufen&#8230;</p>
<p>Variablen heissen Variablen weil ihr Wert variabel ist. Er sich also ständig ändern kann. Der Bezeichner der Variable bleibt aber immer gleich. Er wurde von uns, den Programmierern, festgelegt.</p>
<p>Mit den &#8220;variablen Variablen&#8221; ändert sich das. Bei ihnen ist der Bezeichner, also der Name der Variable, nicht festgesetzt, sondern variabel. Man kann also als Bezeichner der neuen Variabel den Wert einer bereits existierenden verwenden. Dies klingt in Worten sehr kompliziert. Desshalb hier ein kleines Beispiel für das bessere Verständniss:</p>
<p><span id="more-357"></span></p>
<pre class="brush: php; title: ; notranslate">
$bezeichner = &quot;test&quot;;
$$bezeichner = &quot;Dieser Text wird ausgegeben!&quot;;

echo $test;
</pre>
<p>Man beachte das doppelte Dolar-Zeichen auf der Zeile zwei. Dort entsteht die neue Variable. Als Bezeichner wird der Wert der bereits existierenden Variable &#8220;$bezeichner&#8221; genommen. Dieser Wert ist &#8220;test&#8221;, deshalb heisst die neue Variable dann auch &#8220;$test&#8221; und kann ausgegeben werden.</p>
<p>Noch nicht verstanden? Schau dir das Beispiel nochmals an. Es ist am Anfang ein wenig verwirrend <img src='http://code.dedu.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Verstanden? Dann stellt sich jetzt die Frage wofür man variable Variablen denn überhaupt gebrauchen könnte&#8230;</p>
<p>Diese Frage kann ich nicht richtig beantworten. Wahrscheinlich werdet ihr diese variablen Variablen nie verwenden. Ein mögliches Einsatzgebiet wäre das instanzieren von Variablen deren Wert z.B. in einer Datenbank abgespeichert wurden:</p>
<pre class="brush: php; title: ; notranslate">
$query = &quot;SELECT bezeichner, wert FROM configVar&quot;;
$result = $db-&gt;query($query);
while($row = $db-&gt;fetch_array($result)){
    $config_var_{$row[&quot;bezeichner&quot;]} = $row[&quot;wert&quot;];
}
</pre>
<p>Wenn man diesen Code anschaut stösst man auch gleich auf etwas dass ich euch noch nicht erklärt habe: Die geschweiften Klammern auf Zeile 4. Diese werden benötigt da wir erst den hinteren Teil der der neuen Variablen variabel halten wollen. Sich also nur dieser verändern soll.</p>
<p>Hätten wir in unserem obigen Beispiel einen Eintrag in der Datenbank mit den Werten &#8220;db&#8221; im Feld &#8220;bezeichner&#8221; und &#8220;personen&#8221; im Feld &#8220;wert&#8221;, könnten wir nun im Laufe des Programmes auf die Variable &#8220;$config_var_db&#8221; mit dem Wert &#8220;personen&#8221; zugreifen.</p>
<p>Falls euch weitere sinnvolle Einsatzgebiete für diese variablen Variablen einfallen hinterlasst mir doch bitte einen Kommentar. Würde mich interessieren <img src='http://code.dedu.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h2>Weiterführende Links</h2>
<ul>
<li>Offizielle Doku: <a href="http://php.net/manual/de/language.variables.variable.php" target="_blank">variable Variablen</a></li>
<li>Guter englischer Blogeintrag: <a href="http://foundationphp.com/blog/2010/12/18/understanding-php-variable-variables/">http://foundationphp.com/blog/2010/12/18/understanding-php-variable-variables/</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/zknmnPSLE-k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=357</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=357</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: empty()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/4IUGAtqXpNU/</link>
		<comments>http://code.dedu.ch/?p=346#comments</comments>
		<pubDate>Fri, 10 Feb 2012 10:01:35 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=346</guid>
		<description><![CDATA[Uff. Der letzte &#8220;Funktion der Woche&#8221;-Post ist schon über einen Monat alt. Möchte mich da jetzt nicht rausreden. War einfach zu faul um jede Woche zu bloggen&#8230; Wie auch immer. Heute möchte ich euch wieder eine neue Funktion vorstellen oder euch wieder an diese erinnern. Sie heisst &#8220;empty()&#8221; und macht im Grunde genommen nichts anderes [...]]]></description>
			<content:encoded><![CDATA[<p>Uff. Der letzte &#8220;Funktion der Woche&#8221;-Post ist schon über einen Monat alt. Möchte mich da jetzt nicht rausreden. War einfach zu faul um jede Woche zu bloggen&#8230;</p>
<p>Wie auch immer. Heute möchte ich euch wieder eine neue Funktion vorstellen oder euch wieder an diese erinnern. Sie heisst &#8220;empty()&#8221; und macht im Grunde genommen nichts anderes als zu prüfen ob eine Variable leer ist. Was für PHP &#8220;leer&#8221; bedeuted sehen wir später im Post.</p>
<p><span id="more-346"></span></p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Um zu überprüfen ob eine Variable leer ist <img src='http://code.dedu.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Manchmal kann eine Variable zum Beispiel Null oder ein leerer String sein. Beides empfinden wir Menschen als leer. In PHP müsste man also prüfen ob die Variable Null oder leer ist. Das sieht weder schön noch professionel aus. Mit empty() geht das viel besser:</p>
<pre class="brush: php; title: ; notranslate">

$v = 0;

if(empty($v)){
 echo &quot;Die Variable ist leer.&quot;;
}
</pre>
<h2>Was ist den &#8220;leer&#8221;?</h2>
<p>Eine wichtige Frage! Haben wir z.B. eine Variable die in unserem Fall als leerer String und Null als leer gelten soll, bei False allerdings nicht, haben wir ein Problem mit empty() weil False auch als &#8220;leer&#8221; gilt.</p>
<p>Was als &#8220;leer&#8221; gilt:</p>
<ul>
<li>NULL</li>
<li>False</li>
<li>(int)0</li>
<li>(float)0.0</li>
<li>&#8220;0&#8243; (also 0 als einziges Zeichen in einer Zeichenkette)</li>
<li>&#8220;&#8221; (ein leerer String)</li>
<li>(ein leerer Array)</li>
</ul>
<p>Ihr könnt diese Funktion also nicht einfach blind verwenden. Vor Verwendung kurz überlegen ob in eurem Fall alles wie oben beschrieben als &#8220;leer&#8221; gilt.</p>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://php.net/manual/de/function.empty.php">empty() Doku</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/4IUGAtqXpNU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=346</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=346</feedburner:origLink></item>
		<item>
		<title>SASS: Für CSS wie jQuery für JavaScript</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/qrrlLcw8MLo/</link>
		<comments>http://code.dedu.ch/?p=295#comments</comments>
		<pubDate>Fri, 10 Feb 2012 08:56:22 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tipps und Tricks]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=295</guid>
		<description><![CDATA[Wolltest du schon immer mal Variablen in deinem CSS-File verwenden und damit rechnen? Oder Funktionen? Dann lies weiter! Heute möchte ich euch nämlich Sass (&#8220;Syntactically Awesome Stylesheets&#8221;) vorstellen.  Sass ist eine Art Add-On für CSS. Wie jQuery für JavaScript&#8230; Um Sass verwenden zu können, braucht man Ruby  um das SCSS-File in ein CSS-File zu &#8220;Kompilieren&#8221;. Hat man [...]]]></description>
			<content:encoded><![CDATA[<p>Wolltest du schon immer mal Variablen in deinem CSS-File verwenden und damit rechnen? Oder Funktionen? Dann lies weiter!</p>
<p>Heute möchte ich euch nämlich Sass (&#8220;Syntactically Awesome Stylesheets&#8221;) vorstellen.  Sass ist eine Art Add-On für CSS. Wie <a href="http://jquery.com/" target="_blank">jQuery </a>für JavaScript&#8230;</p>
<p><span id="more-295"></span></p>
<p>Um Sass verwenden zu können, braucht man <a href="http://www.ruby-lang.org/de/" target="_blank">Ruby </a> um das SCSS-File in ein CSS-File zu &#8220;Kompilieren&#8221;. Hat man Ruby installiert, kann man auf der Konsole einfach &#8220;gem install sass&#8221; ausführen, und Sass wird installiert.</p>
<h3>Ein Beispiel</h3>
<p>Beginnen wir mit einem Beispiel. Zuerst erstellen wir eine HTML-Datei. Nennen wir sie &#8220;index.html&#8221;:</p>
<pre class="brush: xml; highlight: [7]; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt;Sass-Test&lt;/title&gt;
&lt;link rel=&quot;stylesheet&quot; media=&quot;screen&quot; href=&quot;style.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div class=&quot;tst&quot;&gt;
		&lt;p&gt;Lorem Ipsum dolor sit amet...&lt;/p&gt;
		&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;
		&lt;p&gt;Lorem &lt;a href=&quot;#&quot;&gt;Ipsum&lt;/a&gt;&lt;/p&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Wie man sieht, habe ich die Datei style.css als Stylesheet angegeben. Diese existiert noch nicht, und die werden wir auch nie selbst schreiben. Dies erledigt SASS für uns indem es ein SCSS-File &#8220;kompiliert&#8221;.</p>
<p>Als nächstes erstellen wir eben jenes SCSS-File und benennen es &#8220;style.scss&#8221;. Am besten speichern wir es im selben Ordner wie das eben angelegte &#8220;index.html&#8221;-File.</p>
<p>Öffnen können wir es nun mit einem beliebigen Editor (z.B. Notepad++). Beginnen wir indem wir folgende Zeilen in das SCSS-File einfügen:</p>
<pre class="brush: plain; title: ; notranslate">
$main-color: #66c066;
.tst{
    color:$main-color;
}
</pre>
<p>In der ersten Zeile habe ich die Variabel &#8220;main-color&#8221; definiert. Ihr habe ich einen Wert zugewiesen, der eine grüne Farbe repräsentiert. Danach habe ich, wie in CSS üblich, der Klasse &#8220;tst&#8221; eine Farbe zugewiesen. Aber anstatt einen fixen Wert konnte ich die oben definierte Variable einsetzen.</p>
<p>Um das SCSS-File nun zu &#8220;kompilieren&#8221;, muss man mit der Konsole in das Verzeichnis in dem das SCSS-File liegt wechseln, und dort folgende ausführen:</p>
<pre class="brush: plain; title: ; notranslate">
sass style.scss:style.css
</pre>
<p>Nun wird die Datei &#8220;style.css&#8221; automatisch erstellt, solange im SCSS-File keine Fehler vorhanden sind&#8230;</p>
<p>Ruft man nun im Browser die &#8220;index.html&#8221; auf, sieht man einen Text mit grüner Schrift. Ihr könnt nun den Wert der Variable &#8220;main-color&#8221; ändern und das SCSS-File erneut &#8220;kompilieren&#8221;. Die Farbe der Schrift wird sich nun dementsprechend ändern&#8230;</p>
<h3>Verschachtelungen</h3>
<p>Verschachtelungen steigern extrem die Lesbarkeit der Files. Nehmen wir als Beispiel folgendes CSS:</p>
<pre class="brush: css; title: ; notranslate">
.main{
    color:red;
    width:700px;
}
.main p{
    margin:20px;
}
.main p a{
    color:blue;
}
</pre>
<p>Dank SASS können wir dies auch so schreiben:</p>
<pre class="brush: css; title: ; notranslate">
    .main{
        color:red;
        width:700px;

        p{
            margin:20px;

            a{
                color:blue;
            }
        }
    }
</pre>
<p>Wie man sieht steht der Paragraph (das &#8220;p&#8221;) im &#8220;.main&#8221;-Block. Was ich darin definiere bezieht sich also auf alle Paragraphen innerhalb des &#8220;.main&#8221;-Blockes. Ich finde, das steigert die Lesbarkeit enorm. Auch ist so immer alles &#8220;schön zusammen&#8221;&#8230;</p>
<p>Laut SASS-Homepage ist auch folgendes möglich, habe es aber selbst noch nie ausprobiert:</p>
<pre class="brush: css; title: ; notranslate">
li {
  font: {
    family: serif;
    weight: bold;
    size: 1.2em;
  }
}
</pre>
<p>Wenn man das Selbe in CSS schreiben müsste, müsste man einfach drei mal mehr &#8220;font&#8221; schreiben:</p>
<pre class="brush: css; title: ; notranslate">
li {
  font-family: serif;
  font-weight: bold;
  font-size: 1.2em;
}
</pre>
<p>So hält man auch wieder Sachen die zusammen gehören zusammen. Kann man aber meiner Meinung nach auch gerne weglassen&#8230;</p>
<h3>Erweitern</h3>
<p>Ein weiteres schönes Feature ist das Erweitern von Blöcken mit anderen. Das heisst, dass ich bereits definiertes erneut verwenden kann.</p>
<p>Zur Erklärung beginne ich wieder mit einem Beispiel. Nehmen wir mal folgendes HTML:</p>
<pre class="brush: xml; title: ; notranslate">&lt;div class=&quot;container&quot;&gt;
	&lt;p&gt;Lorem Ipsum Dolor sit amet&lt;/p&gt;
	&lt;ul&gt;
		&lt;li&gt;Lorem&lt;/li&gt;
		&lt;li&gt;Ipsum&lt;/li&gt;
		&lt;li&gt;Dedu&lt;/li&gt;
		&lt;li&gt;Amet&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;zweiterContainer&quot;&gt;
	&lt;p&gt;Lorem Ipsum Dolor sit amet&lt;/p&gt;
	&lt;ul&gt;
		&lt;li&gt;Lorem&lt;/li&gt;
		&lt;li&gt;Ipsum&lt;/li&gt;
		&lt;li&gt;Dedu&lt;/li&gt;
		&lt;li&gt;Amet&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;</pre>
<p>Also zwei Container mit dem selben Inhalt. Dazu schrieb ich folgendes SASS:</p>
<pre class="brush: css; title: ; notranslate">
.container{
	width:200px;
	border:1px solid black;
	margin:10px;
	p {
		font-size:30px;
	}
	ul{
		color:gray;
	}
}

.zweiterContainer{
	@extend .container;
	color:red;
}
</pre>
<p>Ich definiere als erstes den ersten Container. Im Zweiten dann erweitere ich ihn um den ersten, und füge noch die Farbe Rot hinzu.</p>
<p>Der zweite Container sieht nun ausser der roten Farbe exakt gleich aus:</p>
<p><a href="http://code.dedu.ch/wp-content/uploads/SASS-Erweitern.png"><img class="alignnone size-full wp-image-319" title="SASS-Erweitern" src="http://code.dedu.ch/wp-content/uploads/SASS-Erweitern.png" alt="" width="219" height="484" /></a></p>
<p>Natürlich hätte ich dem zweiten Containter auch einfach noch zusätzlich die Klasse des ersten geben können. Aber hier geht es ja um das Beispiel, und ich bin mir sicher ihr findet bessere Wege dieses Erweitern einzusetzen.</p>
<h3>Mixins</h3>
<p>Mit Mixins kann man ganze Blöcke definieren und diese dann an verschiedenen stellen verwenden. Also ähnlich wie erweitern. Nur kann man z.B. noch Argumente mitgeben. Ja, Argumente! Cool, nicht?</p>
<p>Die Mixins erinnern mich stark an Funktionen aus einer Programmiersprache. Man definiert etwas einmal, und kann es dann an verschiedenen stellen verwenden. Das ganze kann man dann noch per Argumente steuern&#8230;</p>
<p>Und hier auch wieder ein Beispiel. Zwei Boxen:</p>
<pre class="brush: php; title: ; notranslate">
&lt;div class=&quot;box1&quot;&gt;
	&lt;p&gt;Box 1&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;box2&quot;&gt;
	&lt;p&gt;Box 2&lt;/p&gt;
&lt;/div&gt;
</pre>
<p>Und das SCSS-File:</p>
<pre class="brush: css; title: ; notranslate">
@mixin box($width){
	border: 1px solid black;
	width: $width;
	margin-top:20px;

	p{
		margin:10px;
	}
}

.box1{
	@include box(200px);
	color:red;
}

.box2{
	@include box(100px);
	color:blue;
}
</pre>
<p>Wie man sieht erstelle ich ein Mixin &#8220;box&#8221; mit einem Argument. Darin definiere ich dann eine Box. Als Breite (&#8220;width&#8221;) verwende ich das Argument, also die Variable, &#8220;$width&#8221;. Somit kann ich die Breite der Zwei Boxen dann individuell einstellen.</p>
<p>Wie man sieht kann man auch in den Mixins Verschachtelungen verwenden. Dem Paragraphen (&#8220;p&#8221;) habe ich so ein Margin von 10 Pixeln gegeben.</p>
<p>Danach definiere ich die einzelnen Boxen. Darin inkludiere ich nun das bereits definierte Mixin &#8220;box&#8221;. Es wird nun also alles was ich im Mixin definiert habe für die Box übernommen.</p>
<p>Danach kann ich die Box natürlich noch weiter anpassen, wie man bei der Farbe (z.B. &#8220;color:red;&#8221; bei box1) sieht.</p>
<h3>Funktionen</h3>
<p>In SASS gibt es natürlich auch Funktionen. Eine Liste eben dieser findet ihr <a href="http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html" target="_blank">hier</a>. Ich werde euch hier nicht alle vorstellen. Ich zeige euch in diesem Abschnitt anhand eines Beispieles die grundsätzliche Verwendung von Funktionen mit der Funktion &#8220;<a href="http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#lighten-instance_method" target="_blank">lighten</a>&#8220;.</p>
<p>Im Beispiel haben wir ein paar verschachtelte Boxen:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;box1&quot;&gt;
	&lt;div class=&quot;box11&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;box12&quot;&gt;
		&lt;div class=&quot;box121&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Das SASS sieht so aus:</p>
<pre class="brush: css; title: ; notranslate">
$main-color: #4d2041;

@mixin box($width, $level){
	border: 1px solid black;
	width: $width;
	min-height:50px;
	margin:20px;
	background-color:lighten($main-color, $level * 20%);
}

.box1{
	@include box(400px, 1);
}
.box11{
	@include box(100px, 2);
}
.box12{
	@include box(200px, 2);
}
.box121{
	@include box(100px, 3);
}
</pre>
<p>Zuerst definiere ich eine Variable mit der Grundfarbe. Danach erstelle ich ein Mixin damit ich die boxen nicht einzeln definieren muss. Das haben wir ja alles schon weiter oben gesehen.</p>
<p>Das interessante ist ist wie ich die Hintergrundfarbe der Boxen definiert habe. Diese passt sich je nach Level an. Genauer gesagt wird sie heller.</p>
<p>Möglich macht dies die Funktion die ich anstatt einem fixen Wert oder einer Variable bei &#8220;background-color&#8221; angegeben habe. Das erste Argument ist die Farbe, bei der ich eine Variable eingesetzt habe. Das Zweite ist eine Prozentzahl um die die Farbe aufgehellt werden soll. Hier habe ich einen Fixen Wert mit der Variable $level multipliziert. Die Hintergrundfarbe wird also je nach tiefe der Verschachtelung heller.</p>
<p>Das Resultat sieht dann so aus:</p>
<p><a href="http://code.dedu.ch/wp-content/uploads/SASS-Funktion-Lighten.png"><img class="alignnone size-full wp-image-310" title="SASS-Funktion-Lighten" src="http://code.dedu.ch/wp-content/uploads/SASS-Funktion-Lighten.png" alt="Ein Printscren des Beispieles" width="456" height="251" /></a></p>
<p>Sehr nützlich. Ich denke hier zum Beispiel an verschachtelte Navigationen&#8230;</p>
<p>Achja: Wenn man Ruby beherrscht kann man auch <a href="http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html" target="_blank">selbst Funktionen definieren</a>&#8230;</p>
<h3>Schlusswort</h3>
<p>Ich hoffe ich habe euch Appetit auf dieses mächtige Werkzeug gemacht. Natürlich habe ich in diesem Artikel nur einen Teil von SASS behandelt. Wer mehr lesen und lernen will kann sich die folgenden Links ansehen:</p>
<ul>
<li><a href="http://sass-lang.com/" target="_blank">Die offizielle Website</a></li>
<li><a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html" target="_blank">Die offizielle Referenz</a></li>
<li>Besonders Spannend: <a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#control_directives" target="_blank">Die Kontrollstrukturen</a> (If-Abfragen, Schleifen, &#8230;)</li>
<li><a href="http://compass-style.org/" target="_blank">Compass</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/qrrlLcw8MLo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=295</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=295</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: nl2br()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/bsBgptW9z98/</link>
		<comments>http://code.dedu.ch/?p=330#comments</comments>
		<pubDate>Wed, 04 Jan 2012 14:06:10 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=330</guid>
		<description><![CDATA[Nach einer kleinen Pause möchte ich euch wieder mit einem Funktion-der-Woche-Post beglücken. Diese Woche mit der Funktion nl2br() nl2br() fügt vor allen Zeilenumbrüchen (z.B. \n) den HTML-Tag für eine neue Zeile ein: &#60;br /&#62; Wofür könnte ich diese Funktion gebrauchen? Oft brauchte ich nl2br() wenn ich den Inhalt aus einer Textarea auf der Website anzeigen [...]]]></description>
			<content:encoded><![CDATA[<p>Nach einer kleinen Pause möchte ich euch wieder mit einem Funktion-der-Woche-Post beglücken. Diese Woche mit der Funktion nl2br()</p>
<p>nl2br() fügt vor allen Zeilenumbrüchen (z.B. \n) den HTML-Tag für eine neue Zeile ein: &lt;br /&gt;</p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Oft brauchte ich nl2br() wenn ich den Inhalt aus einer <a href="http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche" target="_blank">Textarea </a>auf der Website anzeigen will. Oder aber auch wenn man auf einer Website eine .txt-Datei ausgibt.</p>
<p>Ich gebrauche die Funktion also immer dann, wenn ich einen mehrzeiligen Text direkt auf der Website ausgeben will.</p>
<h2>Beispiel</h2>
<p>Natürlich darf ein Beispiel nicht fehlen. Nehmen wir mal folgende HTML-Seite:</p>
<pre class="brush: xml; highlight: [9,10,11,12,13]; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt;R&amp;uuml;ckmeldung&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;form action=&quot;rueckmeldung.php&quot; method=&quot;POST&quot;&gt;
		&lt;label for=&quot;kommentar&quot;&gt;Ihre R&amp;uuml;ckmeldung:&lt;/label&gt; &lt;br /&gt;
		&lt;textarea name=&quot;kommentar&quot; id=&quot;kommentar&quot; rows=&quot;5&quot; cols=&quot;30&quot;&gt;&lt;/textarea&gt; &lt;br /&gt;
		&lt;input type=&quot;submit&quot; value=&quot;Abschicken&quot; /&gt;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Wie man sieht sendet das Formular den Inhalt eines mehrzeiligen Textfeldes an das PHP-File &#8220;rueckmeldung.php&#8221;:</p>
<pre class="brush: php; title: ; notranslate">
echo &quot;&lt;b&gt;Sie haben uns folgende R&amp;uuml;ckmeldung geschickt: &lt;/b&gt;&lt;br /&gt;&quot;;
echo nl2br($_POST[&quot;kommentar&quot;]);
</pre>
<p>Wenn ihr nun einen mehrzeiligen Text eingebt, wird dieser auch wieder mehrzeilig dargestellt. Wenn ihr das nl2br() rausnehmt, würde alles immer auf einer Zeile ausgegeben&#8230;</p>
<h2>Das zweite Argument</h2>
<p>Man kann diese Funktion auch mit einem optionalen zweiten Parameter aufrufen. Dieser legt fest ob <strong>X</strong>HTML-kompatible Zeilenumbrüche verwendet werden sollen oder nicht. Es wird ein boolescher Wert erwartet. Also <em>true</em> wenn ein XHTML-kompatibler Zeilenumbruch verwendet werden soll, <em>false </em>wenn nicht. Wenn ihr ihn nicht angebt, werden XHTML-kompatible Zeilenumbrüche verwendet&#8230;</p>
<p>Ein XHTML-kompatibler Zeilenumbruch ist übrigens &#8220;&lt;br /&gt;&#8221;. Ein &#8220;normaler&#8221; Zeilenumbruch wäre &#8220;&lt;br&gt;&#8221;. Man beachte den Slash vor der schliessenden eckigen Klammer.</p>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://ch2.php.net/manual/de/function.nl2br.php" target="_blank">Offizielle Doku der Funktion</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/bsBgptW9z98" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=330</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=330</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: array_sum()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/htEi7er-zg0/</link>
		<comments>http://code.dedu.ch/?p=288#comments</comments>
		<pubDate>Tue, 06 Dec 2011 15:42:53 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[array_sum]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=288</guid>
		<description><![CDATA[Die Funktion array_sum summiert alle Werte in einem Array, und gibt das Resultat zurück. Strings im Array werden in Integer umgewandelt, oder werden ignoriert (je nach PHP-Version). Wofür könnte ich diese Funktion gebrauchen? Ich persönlich verwende die Funktion hauptsächlich um den Durchschnitt zu berechnen. Beispiele Das Ergebniss: 10 Den Durchschnitt berechnen: Ergebniss: 6.25 Weiterführende Links [...]]]></description>
			<content:encoded><![CDATA[<p>Die Funktion array_sum summiert alle Werte in einem Array, und gibt das Resultat zurück. Strings im Array werden in Integer umgewandelt, oder werden ignoriert (je nach PHP-Version).</p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Ich persönlich verwende die Funktion hauptsächlich um den Durchschnitt zu berechnen.</p>
<h2>Beispiele</h2>
<pre class="brush: php; title: ; notranslate">
$arr = array(7,2,1,&quot;basdf&quot;);
echo array_sum($arr);
</pre>
<p>Das Ergebniss: 10</p>
<p>Den Durchschnitt berechnen:</p>
<pre class="brush: php; title: ; notranslate">$arr = array(7,2,1,15);
echo array_sum($arr)/count($arr);
</pre>
<p>Ergebniss: 6.25</p>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://php.net/manual/de/function.array-sum.php" target="_blank">Dokumentation von array_sum</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/htEi7er-zg0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=288</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=288</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: printf()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/131uNaEPQ78/</link>
		<comments>http://code.dedu.ch/?p=270#comments</comments>
		<pubDate>Tue, 08 Nov 2011 09:22:03 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Funktion]]></category>
		<category><![CDATA[printf]]></category>
		<category><![CDATA[sprintf]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=270</guid>
		<description><![CDATA[printf() Diese Funktion gibt einen String aus, im Gegensatz zu &#8220;echo&#8221; kann man diesen aber formatieren. Und genau deswegen erkläre ich printf() zur Funktion der Woche! Wofür könnte ich diese Funktion gebrauchen? Wie schon oben erwähnt, kann man Strings mit printf() formatieren. So ist es zum Beispiel möglich, eine Zahl immer mit zwei Nachkommastellen ausgeben, [...]]]></description>
			<content:encoded><![CDATA[<h1>printf()</h1>
<p>Diese Funktion gibt einen String aus, im Gegensatz zu &#8220;echo&#8221; kann man diesen aber formatieren. Und genau deswegen erkläre ich <a href="http://www.php.net/manual/de/function.printf.php" target="_blank">printf()</a> zur Funktion der Woche!</p>
<p><span id="more-270"></span></p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Wie schon oben erwähnt, kann man Strings mit printf() formatieren. So ist es zum Beispiel möglich, eine Zahl immer mit zwei Nachkommastellen ausgeben, oder einen Integer in Binär- oder Hexadezimaldarstellung zu formatieren&#8230;</p>
<p>Natürlich kann man auch String mit printf() sehr schön formatieren, dazu aber in den Beispielen mehr&#8230;</p>
<h2>Beispiele</h2>
<pre class="brush: php; title: ; notranslate">
$i = 837401;
$f = 473.9273;

printf(&quot;Float: %f \n&quot;, $f);
printf(&quot;Float mit zwei Nachkommastellen: %.2f \n&quot;, $f);
printf(&quot;Float mit drei Nachkommastellen: %.3f \n&quot;, $f);
printf(&quot;Hexadezimal: %x \n&quot;, $i);
printf(&quot;Hexadezimal mit Grossbuchstaben: %X \n&quot;, $i);
printf(&quot;Binärdarstellung: %b \n\n&quot;, $i);

$s = &quot;DeDu&quot;;
$s2 = &quot;Langer Text, den man irgendwann abschneiden sollte...&quot;;
printf(&quot;[%s] &lt;- Normale Ausgabe \n&quot;, $s);
printf(&quot;[%8s] &lt;- Rechtsbündige Ausgabe \n&quot;, $s);
printf(&quot;[%-8s] &lt;- Linksbündige Ausgabe \n&quot;, $s);
printf(&quot;[%'#8s] &lt;- Linksbündige Ausgabe mit Benutzerdefiniertem Auffüllzeichen \n&quot;, $s);
printf(&quot;Text abschneiden nach 20 Zeichen: %.20s\n&quot;, $s2);
</pre>
<p>Ergibt folgende Ausgabe:</p>
<pre>Float: 473.927300
Float mit zwei Nachkommastellen: 473.93
Float mit drei Nachkommastellen: 473.927
Hexadezimal: cc719
Hexadezimal mit Grossbuchstaben: CC719
Binärdarstellung: 11001100011100011001

[DeDu] &lt;- Normale Ausgabe
[    DeDu] &lt;- Rechtsbündige Ausgabe
[DeDu    ] &lt;- Linksbündige Ausgabe
[####DeDu] &lt;- Linksbündige Ausgabe mit Benutzerdefiniertem Auffüllzeichen
Text abschneiden nach 20 Zeichen: Langer Text, den man</pre>
<h2>Hä?</h2>
<p>Schauen wir uns das doch mal genauer an. Als ersten Parameter geben wir bei printf() immer einen String mit. In diesem String können wir mit dem Prozentzeichen Platzhalter definieren, welche dann ersetzt werden. Wie diese Platzhalter aber genau ersetzt werden, können wir steuern. Zum Beispiel mit der Typenangabe: Mit %d kann ich einen Integer ausgeben. Wenn ich nun dieses &#8220;d&#8221; mit &#8220;b&#8221; ersetze, wird der selbe Integer als Binär-Wert herausgeschrieben. Weiteres findet man in der <a href="http://www.php.net/manual/de/function.sprintf.php" target="_blank">offiziellen Doku</a>.</p>
<p>Natürlich müssen  den Wert angeben, der als Basis zum ersetzen der Platzhalter verwendet wird. Diese Werte müssen wir als weitere Parameter bei printf() angeben. Zu beachten ist, dass man dies in der exakt selben Reihenfolge tun muss, wie man die Werte im Formatierungs-String verwendet. Ein Beispiel:</p>
<pre class="brush: php; title: ; notranslate">
$string = &quot;DeDu&quot;;
$laenge = strlen($string);
printf(&quot;Der String '%s' ist %d Zeichen Lang.\n&quot;, $string, $laenge);
</pre>
<p>Ergebnis: Der String &#8216;DeDu&#8217; ist 4 Zeichen Lang.</p>
<p>Falls man die Argumente nicht in der exakten Reihenfolge angeben kann, will, oder man einen Wert mehrmals benötigt, ist auch folgendes möglich:</p>
<pre class="brush: php; title: ; notranslate">
$string = &quot;DeDu&quot;;
$laenge = strlen($string);
printf('Der String \'%s\' ist %d Zeichen Lang. Die Zahl %2$d als Binär-Wert ist: %2$b', $string, $laenge);
</pre>
<p>Ausgabe: Der String &#8216;DeDu&#8217; ist 4 Zeichen Lang. Die Zahl 4 als Binär-Wert ist: 100</p>
<p>Wie man sieht, kann ich mit &#8220;2$&#8221; den zweiten Wert (aber das dritte Argument!) ansprechen. Wichtig ist, dass man hier den Formatierungs-String in <strong>einfache </strong>Anführungszeichen setzt! Ansonsten versucht PHP bei z.B. &#8220;%2$d&#8221; die Variable $d einzusetzen&#8230;</p>
<h2>Weiteres</h2>
<p>Falls man das Ergebnis von printf() nicht ausgeben, sondern zurückgeben will, kann man <a href="http://www.php.net/manual/de/function.sprintf.php" target="_blank">sprintf()</a> verwenden. Mit <a href="http://ch2.php.net/manual/de/function.fprintf.php" target="_blank">fprintf()</a> kann man den String in einen Stream schreiben&#8230;</p>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/131uNaEPQ78" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=270</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=270</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: include() und require()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/lBZRAHDl5E0/</link>
		<comments>http://code.dedu.ch/?p=263#comments</comments>
		<pubDate>Mon, 24 Oct 2011 12:04:40 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[require]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=263</guid>
		<description><![CDATA[Ich nehme stark an, dass jeder PHP-Programmierer die Funktionen &#8220;include()&#8221; und &#8220;require()&#8221; kennt. Doch was ist eigentlich der Unterschied? Viele kennen den nicht, und desshalb schaffen es die Zwei in diesen Post. Notiz am Rande: Wer tatsächlich nicht weiss, was die Funktionen machen, soll bitte hier nachlesen: http://www.php.net/manual/de/function.include.php &#160; &#160; Und was ist jetzt der Unterschied? [...]]]></description>
			<content:encoded><![CDATA[<p>Ich nehme stark an, dass jeder PHP-Programmierer die Funktionen &#8220;include()&#8221; und &#8220;require()&#8221; kennt. Doch was ist eigentlich der Unterschied? Viele kennen den nicht, und desshalb schaffen es die Zwei in diesen Post.</p>
<p>Notiz am Rande: Wer tatsächlich nicht weiss, was die Funktionen machen, soll bitte hier nachlesen: <a href="http://www.php.net/manual/de/function.include.php">http://www.php.net/manual/de/function.include.php</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><span id="more-263"></span></h2>
<h2>Und was ist jetzt der Unterschied?</h2>
<p>Der einzige Unterschied der Funktionen &#8220;include&#8221; und &#8220;require&#8221; ist das Verhalten im Falle dass die angegebene Datei nicht existiert.</p>
<p>In diesem Falle erzeugt &#8220;require&#8221; einen Fatal Error, was die Ausführung des Scriptes stoppt.</p>
<p>&#8220;include&#8221; erzeugt in diesem Falle aber &#8220;nur&#8221; eine Warnung, was die Ausführung des Scriptes nicht abbricht.</p>
<h2>Was soll ich den nun verwenden?</h2>
<p>Wenn ihr Files einbindet, die unbedingt für die weitere Ausführung des Scriptes erforderlich sind, verwendet ihr besser &#8220;require&#8221;. Dass unterbricht die Ausführung schon bevor Schaden angerichtet werden kann, falls das einzubindende File nicht gelesen werden kann. Beispiele hierfür wären Klassen, die ihr in separaten Files geschrieben habt, und die ihr im Script verwendet.</p>
<p>Die zweite Variante, &#8220;include&#8221;, verwendet man für Files, die, falls sie fehlen, die weiter Ausführung des Scripts nicht beeinträchtigen. Ein Beispiel: Nehmen wir an, du willst die Zugriffe auf deine Seite zählen. Dazu schreibst du ein Script, welches du nun bei jedem Aufruf der Seite einbindest. Falls diese Script plötzlich nicht mehr existieren sollte, würde es die weitere Ausführung des &#8220;Haupt&#8221;-Scripts nicht beeinträchtigen, da es nicht auf den Zähler angewiesen ist. Wir verwenden also &#8220;include&#8221; um dem User trotzdem eine Seite anzuzeigen. (Es würde hier sogar Sinn machen, &#8220;<a href="http://www.php.net/manual/de/function.include-once.php" target="_blank">include_once</a>&#8221; zu verwenden.)</p>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://www.php.net/manual/de/function.include.php" target="_blank">include() Doku</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/lBZRAHDl5E0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=263</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=263</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: glob()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/uzi1XWwu_pI/</link>
		<comments>http://code.dedu.ch/?p=247#comments</comments>
		<pubDate>Wed, 19 Oct 2011 06:30:44 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[glob]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=247</guid>
		<description><![CDATA[glob() Wenn man mit dem Filesystem arbeitet, muss man sich &#8220;glob&#8221; unbedingt anschauen. &#8221;glob&#8221; findet Dateipfade die mit dem angegebenen Muster (pattern) übereinstimmen, und gibt das Resultat als Array zurück. Wofür könnte ich diese Funktion gebrauchen? Man könnte zum Beispiel alle Textdateien in einem Verzeichnis suchen (pattern: *.txt). Oder andere Dateien Auch für eine rekursive Funktion, [...]]]></description>
			<content:encoded><![CDATA[<h2>glob()</h2>
<p>Wenn man mit dem Filesystem arbeitet, muss man sich &#8220;glob&#8221; unbedingt anschauen. &#8221;glob&#8221; findet Dateipfade die mit dem angegebenen Muster (pattern) übereinstimmen, und gibt das Resultat als Array zurück.</p>
<p><span id="more-247"></span></p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Man könnte zum Beispiel alle Textdateien in einem Verzeichnis suchen (pattern: *.txt). Oder andere Dateien <img src='http://code.dedu.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Auch für eine rekursive Funktion, die auch alle Unterordner durchsucht kann man &#8220;glob()&#8221; gebrauchen.</p>
<p>Und für ein paar tausend andere Dinge, die ihr euch selbst überlegen könnt&#8230;</p>
<h2>Beispiel</h2>
<p>Angenommen ich habe einen Ordner &#8220;files&#8221;, in dem folgende Dateien liegen:</p>
<p><a href="http://code.dedu.ch/wp-content/uploads/files_2011-10-18_15-55-51.png"><img class="size-full wp-image-252 alignnone" title="Dateien" src="http://code.dedu.ch/wp-content/uploads/files_2011-10-18_15-55-51.png" alt="" width="139" height="222" /></a></p>
<p>Jetzt möchte ich irgendwas mit allen Text-Dateien machen. Dank &#8220;glob()&#8221; sehr einfach:</p>
<pre class="brush: php; title: ; notranslate">
$pattern = &quot;files/*.txt&quot;;

foreach(glob($pattern) as $filename){
	echo $filename.&quot;&lt;br/&gt;&quot;;
}
</pre>
<p>Die Ausgabe wäre:</p>
<pre>files/Kopie von nr1.txt
files/nr1.txt
files/nr2.txt</pre>
<p>Im Pattern kann ich auch ein Fragezeichen verwenden. Dies symbolisiert ein unbekanntes Zeichen:</p>
<pre class="brush: php; title: ; notranslate">
$pattern = &quot;files/nr?.txt&quot;;

foreach(glob($pattern) as $filename){
	echo $filename.&quot;&lt;br/&gt;&quot;;
}
</pre>
<p>Hier wäre die Ausgabe:</p>
<pre>files/nr1.txt
files/nr2.txt</pre>
<p>Mit dem Pattern &#8220;files/[in]*&#8221; wäre die Ausgabe folgendermassen:</p>
<pre>files/index.php
files/nr1.txt
files/nr2.txt</pre>
<h2>Sonstiges</h2>
<p>Man sollte auch den optionalen zweiten Parameter (das Flag) in der Doku beachten. Damit kann man zum Beispiel nur nach Ordnern suchen, oder jedem gefundenen Pfad ein Slash hinzufügen.</p>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://www.php.net/manual/de/function.glob.php" target="_blank">glob() Doku</a></li>
<li><a href="http://en.wikipedia.org/wiki/Glob_(programming)" target="_blank">Wikipedia generell über Glob</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/uzi1XWwu_pI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=247</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=247</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: similar_text()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/2L9OQt8YWhs/</link>
		<comments>http://code.dedu.ch/?p=234#comments</comments>
		<pubDate>Mon, 26 Sep 2011 07:00:14 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[levenshtein]]></category>
		<category><![CDATA[similar_text]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=234</guid>
		<description><![CDATA[similar_text() Mit der Funktion &#8220;similar_text&#8221; lässt sich die Ähnlichkeit zweier Strings berechnen. Als Rückgabewert erhält man die Anzahl übereinstimmenden Zeichen. Wenn man eine Variable (als Referenz) als drittes Argument mitgibt, berechnet &#8220;similar_text&#8221; die Ähnlichkeit als Prozentzahl. Wofür könnte ich diese Funktion gebrauchen? Man könnte so zum Beispiel verhindern, dass jemand bei einer Registration ein Passwort [...]]]></description>
			<content:encoded><![CDATA[<h2>similar_text()</h2>
<p>Mit der Funktion &#8220;<a href="http://de.php.net/manual/de/function.similar-text.php" target="_blank">similar_text</a>&#8221; lässt sich die Ähnlichkeit zweier Strings berechnen. Als Rückgabewert erhält man die Anzahl übereinstimmenden Zeichen.</p>
<p>Wenn man eine Variable (als Referenz) als drittes Argument mitgibt, berechnet &#8220;similar_text&#8221; die Ähnlichkeit als Prozentzahl.<span id="more-234"></span></p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Man könnte so zum Beispiel verhindern, dass jemand bei einer Registration ein Passwort wählt welches zu ähnlich mit dem Benutzernamen ist.</p>
<p>Wenn man Texte abspeichert, könnte man mit dieser Funktion überprüfen, ob schon ein ähnlicher Text existiert (zum Beispiel bei einer Witze-Datenbank).</p>
<p>Ich bin mir sicher, dir fallen noch ein paar mehr Beispiele ein&#8230;</p>
<h2>Worauf muss ich achten?</h2>
<p>Die Funktion &#8220;similar_text&#8221; hat laut <a href="http://de.php.net/manual/de/function.similar-text.php" target="_blank">Doku</a> eine Komplexität von 0(N**3), wobei N die Länge des längeren der beiden zu vergleichenden Zeichenketten ist.</p>
<p>Dies ist eine ziemlich hohe Komplexität. Damit ist gemeint, dass diese Funktion &#8220;viel&#8221; Zeit benötigt. Man sollte sich gut überlegen ob man diese Funktion verwendet. Vor allem wenn man die Funktion, z.B. in einer Schleife, mehrmals aufruft.</p>
<h2>Beispiel</h2>
<pre class="brush: php; title: ; notranslate">

$username = &quot;DeDu&quot;;
$pass = &quot;DeDu1234fgh7j4j&quot;;
$percent = 0.0;
$anz = similar_text($pass, $username, $percent);

echo &quot;Übereinstimende Zeichen: &quot;.$anz.&quot;. Das sind &quot;.$percent.&quot;% Ähnlichkeit...&quot;;
</pre>
<p>Ausgabe:</p>
<pre>Übereinstimende Zeichen: 4. Das sind 42.105263157895% Ähnlichkeit...</pre>
<h1>Levenshtein-Distanz</h1>
<p>In Zusammenhang mit &#8220;similar_text&#8221; möchte ich euch noch eine weitere Funktion vorstellen.</p>
<p>Die Funktion &#8220;<a href="http://de.php.net/manual/de/function.levenshtein.php" target="_blank">levenshtein</a>&#8221; berechnet die Levenshtein-Distanz. Dies ist die minimale Anzahl an Zeichen die ersetzt, eingefügt oder gelöscht werden müssen um einen String in einen anderen umzuwandeln.</p>
<p>Diese Funktion berechnet also auch die Ähnlichkeit zweier Strings. Denn: Je niedriger der Rückgabewert der Funktion, desto ähnlicher sind die Strings.</p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Wenn man zum Beispiel eine Autokorrektur bauen will, empfehle ich diese Funktion. So könnte man dem User &#8220;Apfel&#8221; vorschlagen, wenn er &#8220;apfl&#8221; eintippt (Siehe Beispiel später im Artikel).</p>
<h2>Worauf muss ich achten?</h2>
<p>Die Funktion ist von der Komplexität her deutlich besser als &#8220;similat_text&#8221;, aber immer noch ziemlich teuer (benötigt also auch viel Zeit und Ressourcen).</p>
<p>Die Komplexität ist 0(m*n), wobei &#8220;m&#8221; und &#8220;n&#8221; die Länge der Strings darstellen (laut <a href="http://de.php.net/manual/de/function.levenshtein.php" target="_blank">Doku</a>).</p>
<p>Aufpassen muss man auch mit Strings, die länger als 255 Zeichen sind. Denn Levenshtein() kann diese nicht verarbeiten. In diesem Fall wird -1 zurückgegeben.</p>
<h2>Beispiel</h2>
<pre class="brush: php; title: ; notranslate">
$input = &quot;apfl&quot;;

$liste = array(&quot;Apfel&quot;, &quot;Karotte&quot;, &quot;Ananas&quot;);

$last = -1;
$gefunden = &quot;&quot;;
foreach($liste as $val){
	$anz = levenshtein($input, $val);

	if($anz &lt; $last || $last &lt; 0){
		$last = $anz;
		$gefunden = $val;
	}
}

echo &quot;Ähnlichstes Wort: &quot;.$gefunden.&quot; (Input: &quot;.$input.&quot;)&quot;;
</pre>
<p>Ausgabe:</p>
<pre>Ähnlichstes Wort: Apfel (input: apfl)</pre>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://de.php.net/manual/de/function.similar-text.php" target="_blank">similar_text() Doku</a></li>
<li><a href="http://de.php.net/manual/de/function.levenshtein.php" target="_blank">levenshtein() Doku</a></li>
<li><a href="http://de.wikipedia.org/wiki/Levenshtein-Distanz" target="_blank">&#8220;Levenshtein-Distanz&#8221; Wikipedia</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/2L9OQt8YWhs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=234</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=234</feedburner:origLink></item>
		<item>
		<title>Funktion der Woche: serialize()</title>
		<link>http://feedproxy.google.com/~r/DedusCode/~3/YSqsv1iqtYU/</link>
		<comments>http://code.dedu.ch/?p=223#comments</comments>
		<pubDate>Mon, 19 Sep 2011 12:43:45 +0000</pubDate>
		<dc:creator>DeDu</dc:creator>
				<category><![CDATA[Funktion der Woche]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Serialize]]></category>
		<category><![CDATA[Unserialize]]></category>

		<guid isPermaLink="false">http://code.dedu.ch/?p=223</guid>
		<description><![CDATA[Einleitung Wie ihr aus dem Titel entnehmen könnt, führe ich die Serie &#8220;Funktion der Woche&#8221; ein. Jeden Montag, so die Theorie, werde ich eine Funktion vorstellen, die mir aufgefallen ist. Sei das Positiv, oder Negativ. Funktionen die ich als nützlich einstufe, Alternativen, alte, neue und vielleicht auch solche, die man meiner Meinung nach in Zukunft [...]]]></description>
			<content:encoded><![CDATA[<h2>Einleitung</h2>
<p>Wie ihr aus dem Titel entnehmen könnt, führe ich die Serie &#8220;Funktion der Woche&#8221; ein. Jeden Montag, so die Theorie, werde ich eine Funktion vorstellen, die mir aufgefallen ist. Sei das Positiv, oder Negativ. Funktionen die ich als nützlich einstufe, Alternativen, alte, neue und vielleicht auch solche, die man meiner Meinung nach in Zukunft in PHP standardmässig finden sollte&#8230;</p>
<h2>serialize()</h2>
<p>Im Grunde genommen gibt die Funktion &#8220;<a href="http://php.net/manual/de/function.serialize.php" target="_blank">serialize</a>&#8221; einfach eine Zeichenkette zurück, die dem ihr übergebenen Wert entspricht. Dieser String kann dann zu einem späteren Zeitpunkt wieder zu dem Wert zurück &#8220;verwandelt&#8221; werden. Dazu verwendet man &#8220;<a href="http://www.php.net/manual/de/function.unserialize.php" target="_blank">unserialize</a>&#8220;.</p>
<p>Das Ganze klingt zuerst sehr unspektakulär, kann aber ganz interessant sein&#8230;</p>
<p><span id="more-223"></span></p>
<h2>Wofür könnte ich diese Funktion gebrauchen?</h2>
<p>Dank &#8220;serialize&#8221; kann man Instanzen von Klassen in der Datenbank oder der Session abspeichern. Dies kann in einigen Fällen ganz nützlich sein.</p>
<p>Auch kann ich so eine Instanz einer Klasse an ein anderes (PHP-)Programm weitergeben. In zusammenhang mit AJAX kann dies sehr nützlich sein. Allerdings sollte man den String den man von &#8220;serialize&#8221; erhält erst noch mit <a href="http://php.net/manual/en/function.base64-encode.php" target="_blank">base64</a> &#8220;kodieren&#8221;. Dies verhindert Probleme  mit anderen Kodierungen (ISO 8859, UTF-8 usw.). Falls die Klasse sensible Daten enthält, oder ein Sicherheitsrisiko besteht, sollte man den String noch <a href="http://www.php.net/manual/de/function.mcrypt-encrypt.php" target="_blank">verschlüsseln</a>. Oder, noch besser, man lässt es ganz sein.</p>
<p>Natürlich kann man auch andere Typen serialisieren. Man könnte zum Beispiel auf die Idee kommen, das Session-Array in der Datenbank zu speichern.</p>
<p>Je nach Applikation könnte man also den gesamten aktuellen Status abspeichern. Dies würde dann Sinn machen, wenn man den User beim erneuten Login am selben Ort weiterarbeiten lassen möchte, wie er zuvor aufgehört hat.</p>
<h2>Worauf muss ich achten?</h2>
<p>Falls man ein Objekt serialisiert, und dieses an einem Ort abspeichert, an dem der User Zugriff hat, ist besondere Vorsicht geboten. In diesem Fall könnte man den String zusätzlich noch verschlüsseln. Ob es in diesem Fall aber Sinn macht, &#8220;serialize&#8221; zu verwenden, sei dahingestellt.</p>
<p>Auch einen Boolean kann man serialisieren. Allerdings kann es zu Problemen kommen, wenn man man einen &#8220;False-Boolean&#8221; mittels &#8220;unserialize&#8221; probiert zu &#8220;enserialisieren&#8221;. &#8220;unserialize&#8221; gibt in diesem Fall (korrekterweise) &#8220;False&#8221; zurück, genau wie bei einem Verarbeitungsfehler&#8230;</p>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://www.php.net/manual/de/function.serialize.php" target="_blank">serialize() Doku</a></li>
<li><a href="http://www.php.net/manual/de/function.unserialize.php" target="_blank">unserialize() Doku</a></li>
<li><a href="http://www.php.net/manual/de/language.oop5.serialization.php" target="_blank">Serialisiern von Objekten</a> (Offizielle Website)</li>
<li><a href="http://de.wikipedia.org/wiki/Serialisierung" target="_blank">Wikipediaeintrag &#8220;Serialisierung&#8221;</a> (Deutsch)</li>
<li><a href="http://en.wikipedia.org/wiki/Serialization" target="_blank">Wikipediaeintrag &#8220;Serialisierung&#8221;</a> (Englisch)</li>
</ul>
<img src="http://feeds.feedburner.com/~r/DedusCode/~4/YSqsv1iqtYU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code.dedu.ch/?feed=rss2&amp;p=223</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code.dedu.ch/?p=223</feedburner:origLink></item>
	</channel>
</rss>

