php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.06.2007, 04:51  
Erfahrener Benutzer
 
Benutzerbild von GelaMu
 
Registriert seit: 05.03.2006
Beiträge: 183
GelaMu
Standard etwas ähnliches wie __autoload() für Funktionen

Guten Morgen zusammen =)

Ich habe in meiner CMS mal Gebrauch von __autoload() gemacht, damit die Includes automatisch eingebunden werden, die diese Klassen enthalten.

PHP-Code:
<?php

function __autoload($__Name) {
    
$__File STDINC_PATH."/inc/class.".$__Name.".php";
    if(
is_file($__File)) {
        include(
$__File);
    } else {
        exit(
"<H2>__autoload('".$__Name."'): Fehler beim Nachladen der Klasse</H2>");
    }
}

?>
So, und jetzt wollte ich fragen, ob es denn eine ähnliche Möglichkeit gibt, darauf zu reagieren, wenn eine nicht definierte Funktion aufgerufen wird?
Könnte man irgendwie Fehler abfangen und trotzdem unbemerkt (ohne eine Fehlermeldung auszugeben) das Script weiterlaufen lassen?
Und wenn ja: würde dadurch die Geschwindigkeit zu leiden haben?

Danke euch im Voraus!
GelaMu ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.06.2007, 05:36  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Exception Handling. Damit kannst Du einen Fehler abfangen und das Skript in eine beispielsweise "alternative" Richtung leiten. Es einfach weiter laufen zu lassen ist schlicht unlogisch (und geht meines wissens nicht.).

Gruß
pepe24 ist offline  
Alt 08.06.2007, 05:39  
Erfahrener Benutzer
 
Benutzerbild von GelaMu
 
Registriert seit: 05.03.2006
Beiträge: 183
GelaMu
Standard

Also, unlogisch wäre es auch für mich, aber __autload() gibt es ja auch =)
GelaMu ist offline  
Alt 08.06.2007, 05:47  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Zitat:
irgendwie Fehler abfangen und trotzdem unbemerkt (ohne eine Fehlermeldung auszugeben)
Eine (noch) nicht geladenes Objekt ist ja kein Fehler, denn meistens gehört das ja zur Programmarchitektur dazu, dass Objekte dynamisch geladen werden (siehe FActory-Klassen).
Wofür wäre denn das gut, wenn eine nicht definierte Funktion durch eine art __autoload-Aufruf geladen würde? Wäre die Funktion dann in einer externen PHP-Datei in einer Art "FUnktionspool"? Da ist doch eine Klasse mit den (passenden) Methoden doch um einiges Besser und flexibler, denn ein __autoload für Funktionen wäre ja - in diesem Kontext - wieder ein rückschritt in richtung prozeduralsprache.

Oft wird noch unterschätzt, wozu Exceptions fähig sind(bzw. viele nutzen sie nicht, weil sie aus gründen der bequemlichkeit(u.a) lieber ihre konservativen error-handling methoden verwenden - was ja auch meistens ok ist), aber es ist auf jeden fall einen Blick wert.

Gruß
pepe24 ist offline  
Alt 08.06.2007, 06:02  
Erfahrener Benutzer
 
Benutzerbild von GelaMu
 
Registriert seit: 05.03.2006
Beiträge: 183
GelaMu
Standard

Also, die Sache ist die, dass Klassen um einiges langsamer arbeiten und mehr Speicher verbrauchen, als normale Funktionen. Okay, der Speicherverbrauch ist zwar kein so großes Ding, aber die Tatsache, dass Klassen langsamer sind, ist oft ein Gegenargument für mich.

Aber naja... das war wohl tatsächlich eine blöde Idee
Da ist zwar eine Funktion Namens load(), die mir meine Includes einbindet, aber einen Moment lang dachte ich mir, wie schön es doch wäre, sich nicht mal die Mühe machen zu müssen, diesen aufrufen zu müssen.

Ach so, noch etwas: wenn man irgendwo klasse::methode(); benutzt, ist es doch kein Objekt, oder?
Man kann zwar trotzdem sagen $o = new klasse;, aber die Klasse enthält in dem Fall nur Funktionen, die nicht miteinander kommunizieren.
Die Klasse dient in dem Fall nur als Bunker, um die Funktionen unter einem Dach zu bringen

P.S. entschuldigt wenn die Smilies etwas kindisch wirken
GelaMu ist offline  
Alt 08.06.2007, 09:54  
Erfahrener Benutzer
 
Registriert seit: 17.06.2008
Beiträge: 125
squig befindet sich auf einem aufstrebenden Ast
Standard

Hola,

was ist mit der Verwendung von __call?


Bis dääähne.
squig ist offline  
Alt 08.06.2007, 11:27  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von GelaMu
Also, die Sache ist die, dass Klassen um einiges langsamer arbeiten und mehr Speicher verbrauchen, als normale Funktionen. Okay, der Speicherverbrauch ist zwar kein so großes Ding, aber die Tatsache, dass Klassen langsamer sind, ist oft ein Gegenargument für mich.
Ist das denn wirklich noch so? Ich hatte kürzlich das gleiche vor wie du und mir dann ebenfalls überlegt, gut erstelle ich statt einer Funktion eben eine Sammel-Klasse mit statischer Methode. Zumindest ähnliche Funktionen könnte man darin ja sammeln. Von der Geschwindigkeit her habe ich mal statische und nicht-statische Methoden sowie Funktionen verglichen, etwas Rechnerei darin und eine Millionen Neu-Aufrufe (also mit Instanzierung bei der nicht-statischen Variante), die Ergebnisse waren nahezu gleich.

Das mag zwar kein ordentlicher Benchmark-Test gewesen sein, aber zumindest scheint es ja so, dass sich die drei Kandidaten nicht viel nehmen.
Zergling-new ist offline  
Alt 08.06.2007, 11:32  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von GelaMu
Also, die Sache ist die, dass Klassen um einiges langsamer arbeiten und mehr Speicher verbrauchen, als normale Funktionen. Okay, der Speicherverbrauch ist zwar kein so großes Ding, aber die Tatsache, dass Klassen langsamer sind, ist oft ein Gegenargument für mich.
Um welchem Faktor denn? Mal so zum Nachdenken.
PHP-Code:
<?php
define 
("TESTCASEA"1000000);
define ("TESTCASEB"1000000);
define ("LOOP"1000000);

class 
{
    public static function 
test ($a,$b)  {
        for (
$i 1$i <= $a$i++) {
            
$x $x $b;
        }
    }
}

class 
{
    public function 
test ($a,$b)  {
        for (
$i 1$i <= $a$i++) {
            
$x $x $b;
        }
    }
}


function 
($a,$b) {
   for (
$i1$i <= $a$i++) {
       
$x $x $b;
   }
}

$stamp microtime (true);
for (
$p 0$p >= LOOP$p++) {
    
(TESTCASEA,TESTCASEB);
}
echo (
microtime (true) - $stamp) * 1000 1000;
echo 
"
"
;

$stamp microtime (true);
for (
$p 0$p >= LOOP$p++) {
    
A::test (TESTCASEA,TESTCASEB);
}
echo (
microtime (true) - $stamp) * 1000 1000;
echo 
"
"
;

$stamp microtime (true);
for (
$p 0$p >= LOOP$p++) {
    
$test = new ();
    
$test->test (TESTCASEA,TESTCASEB);
}
echo (
microtime (true) - $stamp) * 1000 1000;
echo 
"
"
;

?>
Code:
20.9808349609
11.9209289551
10.0135803223
Und wenn du wirklich effizient programmieren willst: Schreib in Assember
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 08.06.2007, 11:45  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von KingCrunch
Code:
20.9808349609
11.9209289551
10.0135803223
Was hast du'n für ne alte Mühle?

20.0271606445
8.10623168945
5.96046447754


Ich hatte keine Schleife bei meinen Tests, aber da sieht man mal wie wie hingeklatschte Benchmarks fürn Arsch sein können
Zergling-new ist offline  
Alt 08.06.2007, 11:47  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Laptop Aber die Aussage bleibt die selbe
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Templatesystem mit Funktionen und Variablen drin? BartTheDevil89 PHP Tipps 2008 6 01.07.2008 09:32
rekursive Funktionen ?? usima PHP Tipps 2008 2 04.05.2008 11:25
public, protected, private Funktionen ecomeback PHP Tipps 2007 10 21.08.2007 02:21
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
eine Variable für alle Funktionen definieren Wing PHP Tipps 2007 16 24.06.2007 21:02
komische arrays werden in funktionen nicht angenommen! mollitz PHP Tipps 2007 8 08.03.2007 18:50
Anweisungen, Befehlen und Funktionen guenterfrosch PHP Tipps 2006 7 08.10.2006 13:37
Funktionen überprüfen und Grafik Funktionen hans.karl2 PHP Tipps 2006 10 31.07.2006 20:08
Funktionen in Funktionen - ist das gut? Schneckenkind PHP Tipps 2006 23 10.06.2006 13:39
Globale Variabeln in Funktionen finerip PHP Tipps 2007 3 28.11.2005 16:00
Funktionen aufrufen PHP Tipps 2005 5 31.01.2005 10:57
Eure Ideen sind gefragt: eigene Funktionen verwalten PHP-Fortgeschrittene 12 17.01.2005 15:00
mySQL Funktionen TheSkaterFriend Off-Topic Diskussionen 1 20.06.2004 13:36
Funktionen Erklärung TheSkaterFriend PHP Tipps 2004 14 11.06.2004 22:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php autoload fuer funktionen, __autoload statischen funktionen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.