php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #31 (permalink)  
Alt 02-12-2009, 12:56
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

PHP 5.1.4 @Linux
Array
(
[direct] => 0.0220710000
[reflection] => 0.0465050000
[difference] => 0.024434
)
Mit Zitat antworten
  #32 (permalink)  
Alt 02-12-2009, 13:05
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Überraschend! Also ist der Overhead der Reflection gar nicht so groß und offensichtlich weit von einem "mehrere-Sekunden"-Bereich entfernt. Dass das nur Spaßklassen sind ist imho sekundär, für PHP sind die genau so ernst, haben Methoden und sind abgeleitet. Selbst wenn sie umfangreicher wären und es dadurch 8 Mal so lange dauert, wird man sicher trotzdem selten mehr als 1000 Instanzen haben
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #33 (permalink)  
Alt 02-12-2009, 13:49
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Habs jetzt selbst mal getestet, und komme zu ähnlichen Ergebnissen (auch mit "echten" Klassen …*wobei hier ein 8000-facher durchlauf ein klitzekleinesbisschen länger läuft ) … da hat sich dann wohl was getan, seit dem ich das letzte mal mit der PHP-Reflection rumgespielt habe.

Leider ist mein Blog grade down, da hatte ich das ganze mal in einem Sniffer verwurstet, der Klassen auf bestimmte Regeln prüft. Ich weiß noch, dass das unendlich langsam war.
Mit Zitat antworten
  #34 (permalink)  
Alt 02-12-2009, 14:03
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Das ist aber eine derart versteckte und feste Abhängigkeit, dass es dem Singleton Antipattern in nichts nachsteht und imho noch schlimmer ist, als der Ansatz des TO. Seiner unterstützt dabei wenigstens noch Legacy- und native Klassen.
Die Abhängigkeit steckt hier:
Zitat:
vom TO:
Die Werte der Parameter ergibt sich vorher durch einige Daten aus einer Config.
Ich frage nur, ob die Parameter wirklich im Konstruktor gebraucht werden. Sind sie wirklich notwendig, um das Objekt in den Initialzustand zu versetzen?
Von nativen Klassen sehe ich hier nichts - der TO inkludiert fleißigst.
Legay-Klassen sind das sicher auch nicht. Falls doch, könnte er sich Wrapper erzeugen ... ach was das führt doch schon wieder zu weit. Bleiben wir bei dem was wir wissen: Der TO bastelt so eine Art Autoloader und scheinbar braucht bei ihm jeder Ctor spezifische Parameter, die er in der App-Config abgelegt hat, was nur geht, weil sie schon zur Programmierzeit feststehen.

Wenn man die grunsätzlichen Fehler ausmärzt, sehe ich hier nichts, was über die normale Anwendung eines Autoloaders hinausgeht und für einen Autoloader braucht man i.d.R. keine Reflection.
Mit Zitat antworten
  #35 (permalink)  
Alt 02-12-2009, 14:28
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Ich habe mal aus den vorherigen Codefetzen eine Reflection basierende mini DI Einrichtung gebaut.

Gefallen tut mir das so noch lange nicht....
PHP-Code:
<?php
error_reporting
(-1);
ini_set('display_errors'TRUE);
setlocale(LC_ALL,'de_DE@euro''de_DE',  'de''ge');
date_default_timezone_set('Europe/Berlin');
 


class 
Combie_DB 
{
}

class 
Combie_Model_User 
{
    public function 
__construct(Combie_DB $db
    {
        echo 
'wurde gerufen<br>';
    }
}

function 
fabrik(Array $registry,$klassenBezeichner)
{
  
$rc = new ReflectionClass($klassenBezeichner);
  
$rcconstructorparam=$rc->getConstructor()->getParameters();
  
$params = array();
  foreach(
$rcconstructorparam as $param)
  {
    
$p_class $param->getClass();
    if(empty(
$registry[$p_class->name])) throw new Exception('bad Param');
    
$params[] = $registry[$p_class->name];
  }
  return 
$rc->newInstanceArgs($params);
}

$registry = array();
$registry['Combie_DB'] = new Combie_DB('blabla');

$die_neue fabrik($registry,'Combie_Model_User');
    
    
?>

<hr>
<pre>
<?php
 var_export
($die_neue);
?> 
</pre>
Da bleibe ich doch lieber bei meinen alten DI Containern...
Evtl später mal um die php5.3 Closures/Lambdas aufgemotzt.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #36 (permalink)  
Alt 12-01-2010, 17:42
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Zitat:
Zitat von Quetschi Beitrag anzeigen
PHP 5.1.4 @Linux
Array
(
[direct] => 0.0220710000
[reflection] => 0.0465050000
[difference] => 0.024434
)
Nach Update auf 5.2.8 deutlich langsamer

Array (
[direct] => 0.0530550000
[reflection] => 0.1483920000
[difference] => 0.095337
)
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #37 (permalink)  
Alt 12-01-2010, 22:31
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Ich habe mal eine Frage zu dem Thema. Die Sache mit dem Autoload und der SPL wurde ja schon angesprochen. Spricht irgend etwas dagegen es über diesen Weg zu lösen?
__________________
MM Newmedia | MeinBlog
Mit Zitat antworten
  #38 (permalink)  
Alt 12-01-2010, 23:03
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Der SPL-Autoload-Mechanismus ist die momentane Best Practise. Aber was genau willst du damit lösen? Das Laden von Klassen oder wie der TO irgendwelche Injections?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #39 (permalink)  
Alt 12-01-2010, 23:22
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Also so wie ich das verstanden habe, initiiert der TO verschiedene Klassen, die natürlich verschiedene Parameter im Konstruktor haben können. Ich habe darüber letztes Jahr mal 'n Blogbeitrag geschrieben.

Danach kann ich doch alle Klassen, sofern sie in einer entsprechenden Verzeichnisstruktur aufbereitet sind, mit den entsprechenden Parametern initiieren und muss dies nicht umständlich über die vom TO beschriebene Klasse tun.

Irgendwie habe ich gerade Angst, dass ich total am Thema vorbei denke.
__________________
MM Newmedia | MeinBlog
Mit Zitat antworten
  #40 (permalink)  
Alt 12-01-2010, 23:25
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Du verwechselst initiieren mit instanziieren, aber das nur nebenbei

Inwiefern hat denn die Verzeichnisstruktur der Klassendateien etwas mit deren Konstruktorparametern zu tun? Und was hat das mit Autoloading zu tun. Autoloading ist für das Laden zuständig, nicht für automatische Instanziierung. Bitte aufklären.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #41 (permalink)  
Alt 12-01-2010, 23:34
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Autoloading hat doch den enormen Vorteil, dass ich Klassen nicht mehr per require einbinden muss. Genau das macht ja der TO. Er bindet bei Bedarf die im Array festgehaltenen Klassen ein und instanziert sie mit den im Array festgehaltenen Parametern.

Mit Autoloading kann ich eine Klasse egal von welchem Ort automatisch laden und erspare mir das übergeben der Parameter über eine gesonderte Klasse oder Funktion.

Was hat die Ordnerstruktur damit zu tun? Ich habe mir angewöhnt meine Klassen in umfangreichen Projekten nach der Verzeichnisstruktur zu benennen. Ähnlich wie es das Zend Framework auch tut.

Beispiel:
Die Klasse DataUserEditor liegt nach dem Klassennamen dann im Verzeichnis Lib/Data/User und hat den Dateinamen Editor.class.php. Meine Autoload Funktion bröselt den Klassennamen dann entsprechend auf. Deswegen auch eine durchdachte Verzeichnisstruktur, wie sie in diesem Thread schon mal kurz angesprochen wurde.
Direkt mit den Konstruktorparametern hat dies natürlich nichts zu tun.
__________________
MM Newmedia | MeinBlog
Mit Zitat antworten
  #42 (permalink)  
Alt 13-01-2010, 00:45
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von ezkimo Beitrag anzeigen
Mit Autoloading kann ich eine Klasse egal von welchem Ort automatisch laden und erspare mir das übergeben der Parameter über eine gesonderte Klasse oder Funktion.
Was denn für Parameter?

Deine Erklärung (soweit ich sie verstanden habe) klingt nach dem ganz normalen Verfahren, wie man SPL Autoloading vor PHP 5.3 üblicherweise benutzt hat. Ich verstehe also nicht ganz, worauf du hinaus willst.

Der TO hatte da ja noch ganz andere Sachen im Sinn. Nur zum Verständnis: das meinst du nicht, ja?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dynamische Listbox ? lastyle PHP Developer Forum 12 20-08-2006 15:52
Dynamische XML Dokumente tblhh XML 0 31-07-2006 13:06
dynamische ip yard Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 7 29-04-2004 17:06
dynamische pop-up mister_x1 HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 5 13-11-2003 10:56
Dynamische Liste plr1 PHP Developer Forum 3 22-10-2003 12:53

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:30 Uhr.