|
ulf-wendel.de   
|
|
 Home < PHP Schulung  < Core PHP  < Funktionen  < Fortsetzung    |       |  
Print Version    
---
|
|
 Home 
 PHP Projekte 
 PHP Schulung 
    Informationsquellen 
    Geschichte 
    Core PHP 
       Einbindung in HTML 
       Kommentare 
       Variablen 
       Konstanten 
       Operatoren 
       Funktionen 
          Fortsetzung 
       Kontrollstrukturen 
       Arrays 
       Objektorientierung 
    Fortgeschrittenes PHP 
    Templates 
    Cache-Technologien 
    OOH Forms 
 Technik der Site 
 Büchertipps 
 Fotografie 
 Airbrush 
 Kontakt 
 Stuff 

Fortsetzung Funktionen

Funktionen können rekursiv aufgerufen werden. Die erlaubte Rekursionstiefe ist hoch, aber durch die Stackgröße begrenzt.


Rekursion Top

<?php
 
// Rekursion ist erlaubt
 
function magic($string) {
  
   
$c $string[0];
   
$string substr($string1); 
   if (
'' != $string)
     
magic($string); 

   print 
$c
 } 

 
$string 'Was mag wohl passieren mit: ';
 for (
$i 0$i 26; ++$i)
   
$string.= chr(65 $i);

 
magic($string); 
?>
Ausgabe Top
ZYXWVUTSRQPONMLKJIHGFEDCBA :tim nereissap lhow gam saW

Argumente werden immer "per value" übergeben, sie können jedoch auch als Referenz übergeben werden, wenn dem Argumentnamen ein "&" vorangestellt wurde. Die Übergabe per Referenz empfiehlt sich aus Geschwingkeitsgründen v.a. bei Objekten.

Funktionen können Referenzen auf Variablen zurückliefern. Das Feature ist derzeit umstritten und deshalb nicht dargestellt, es bleibt der Verweis auf das Manual. Ebenfalls nicht behandelt wird das nicht mehr benötigte PHP 2 Relikt old_function.


pass by reference Top

<?php
 
function noChange($value) {
   
$value 10;
 }
 
 
// &$arg
 
function change(&$value) {
   
$value 10;
 }
 
 
$value 1;
 
 
noChange($value);
 print 
"$value = $value\n";
 
change($value);
 print 
"$value = $value\n\n";

 
 
// eingebaute Funktion mit pass by reference
 
$errno 0;
 
$error_msg ""

 
$handle fsockopen("www.php.net"80, &$errno, &$error_msg);
 if (!
$handle) {
   print 
"Fehler: '$error_msg' ($errno)\n\n";
 } else { 

   
fputs($handle"HEAD / HTTP/1.0\n\n");
   while (!
feof($handle))
     print 
fgets($handle128); 
 } 
?>
Ausgabe Top
$value = 1
$value = 10

HTTP/1.1 200 OK
Date: Fri, 18 May 2012 22:08:49 GMT
Server: Apache/1.3.41 (Unix) PHP/5.2.17
X-Powered-By: PHP/5.2.17
Content-language: en
Set-Cookie: COUNTRY=DEU%2C212.227.109.19; expires=Fri, 25-May-2012 22:08:50 GMT; path=/; domain=.php.net
Last-Modified: Sat, 19 May 2012 01:00:11 GMT
Connection: close
Content-Type: text/html;charset=utf-8


Das Keyword "static" dient zur Deklaration von lokalen Funktionsvariablen, die zwischen Funktionsaufrufen ihren Wert behalten.


static Top

<?php
 
// static - Bewahrung des Wertes zwischen Funktionsaufrufen
 
function countHits() {
   static 
$hits 0

   if (
== $hits)
     print 
"$hits wird initialisiert\n"

   
printf('$hits = %03d%s', ++$hits"\n"); 

 } 

 
countHits();
 
countHits(); 
?>
Ausgabe Top
$hits wird initialisiert
$hits = 001
$hits = 002

So wie es "variable variables" gibt, gibt es auch "variable functions". Variable Functions sind zwar ein konfortabler Weg zur dynamischen Erweiterung von Code, aber fehlerträchtig. Variable Functions sollten stets mit function_exists()/ method_exists() kombiniert werden. call_user_func()/ call_user_method() kann die Übersichtlichkeit verbessern.


variable functions Top

<?php
 
// variable functions
 
function printMessage($msg) {
   print 
"Message: '$msg'\n";
 } 

 
$name "printMessage";
 if (
function_exists($name))
   
$name("Hello World!"); 

 
// mit Vorsicht zu genießen: eval()
 
eval($name "('Hallo Welt!');"); 
?>
    
Ausgabe Top
Message: 'Hello World!'
Message: 'Hallo Welt!'

<  ^  >

 Neues

 XML/XSLT Menu
 OOH-Form Rewrite

 PEAR Cache:
  SHM Container

 Suchstring Parser
 Buchrezensionen
 PEAR Cache:
  OutputCompression

 PEAR Menu Browser
 PEAR Menu Tutorial 
 PEAR Cache


 Tipp

Download Version:
oben rechts,
Download *.tar.gz
|
| --- |
|
  Top   |   <  ^  >   |   phpOpenTracker Statistik   |   URL: http://www.ulf-wendel.de/schulung/core/funktionen_mehr.php   |   Stand: 17.01.2002   |   © Ulf Wendel   
|
| --- |

0.405 s Bearbeitungszeit, 0.002 s IT[X], 0.002 s Menu 3