php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.04.2011, 18:09  
Benutzer
 
Benutzerbild von sharpx
 
Registriert seit: 12.04.2011
Beiträge: 50
PHP-Kenntnisse:
Fortgeschritten
sharpx befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von DerJoghurt Beitrag anzeigen
Leider bekomme ich den serialisierte String von einer externen API, die ich nicht beeinflussen kann.
Gibt es noch eine andere Möglichkeit oder soll ich den String jeweils abändern?
Den String abzuändern sollte nun wirklich keine zu große Herausforderung darstellen, jedenfalls im Gegensatz zur Entwicklung einer eigenen Serialisierungsengine

Zitat:
Zitat von mepeisen
Wieso weiss die externe API nichts von deinen Namespaces?
Haben APIs so an sich, dass die meistens wenig über die Logik der Clientsoftware wissen...
sharpx ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.04.2011, 18:15  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.235
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Nun. Wenn die API bereits fertig aufbereitete PHP-Serialisierung zurückgeben bedeutet das im Umkehrschluss meistens auch, dass die API Klassen zur Verfügung stellt. So denke ich halt
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 12.04.2011, 18:24  
Benutzer
 
Benutzerbild von sharpx
 
Registriert seit: 12.04.2011
Beiträge: 50
PHP-Kenntnisse:
Fortgeschritten
sharpx befindet sich auf einem aufstrebenden Ast
Standard

Eine durchaus logische und vertretbare Argumentation. Ich gehe davon aus, dass der Threadersteller innerhalb seiner Applikation Namespaces nutzt, weswegen er auch diese, anscheinend durch das API "bereitgestellten" Klassen, in einem eigenen Namespace eingebunden hat. (Natürlich könnten wir nun über die Sinn und Nutzen dieser Entscheidung debattieren, aber ich denke, dies steht hier nicht zur Debatte, da man als Entwickler, sobald man sich für eine Variante entschieden hat, diese Linie auch konstant weiterverfolgen sollte.)

Eine durchaus interessante Frage wäre jedoch, aus welchem Grund das API eigentlich serialisierte PHP-Objekte zurückgibt, da dies die Verwendungsmöglichkeiten doch durchaus stark begrenzt. Sollte der Threadersteller eine Möglichkeit haben, das API zu modifizieren, so würde ich ihm dies dringend empfehlen, die es im aktuellen Zustand nur mit sehr großem Aufwand mit anderen Programmiersprachen nutzbar wäre.
sharpx ist offline   Mit Zitat antworten
Alt 12.04.2011, 18:33  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Na ja, dass viele Bibliotheken noch keine Namespaces nutzen, ist nunmal nicht zu ändern. Die beim Einsatz alle umzuschreiben, wäre eine sehr umfangreiche und wahrscheinlich sehr sinnlose Arbeit. Das wäre für mich absolut keine Option.

Hier mag's etwas anders aussehen. Wenn es nur um eine einzelne Klasse oder einige wenige Klassen geht, kann man das sicher mal „ummappen“. (Kann mir gut vorstellen, dass ein API auch gerne mal einen wenig durchdachten Klassennamen zurückgibt. )

Die potentielle Gefahr dabei ist, dass man sich alle Komponenten zerschießt, die mit dem originalen Klassennamen arbeiten (per Type-Hinting oder so). Ich würde prinzipiell vom Umbenennen abraten beziehungsweise es nur dann ins Auge fassen, wenn kein komplexerer Kontext vorliegt, in den der ursprüngliche Klassenname integriert ist.

Es ist jedenfalls ein Hack.

Edit: Würde aber spontan auch sagen, der eigentliche Fehler liegt im Design des API.
__________________
Blog | Buch | Kaloa

Geändert von mermshaus (12.04.2011 um 18:45 Uhr).
mermshaus ist offline   Mit Zitat antworten
Alt 13.04.2011, 09:36  
Neuer Benutzer
 
Registriert seit: 12.04.2011
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
DerJoghurt befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für die vielen Kommentare.

Es handelt sich bei der Geschichte um das API von Kaltura. Klatura bietet auch eine Client Bibliothek für PHP, die ich ein wenig umgeschrieben habe.

Kaltura gibt mir nur einen String zurück ohne Namespaces. So wie der aus meinem Beispiel:
Code:
'O:17:"SerializationTest":3:{s:7:"counter";i:999;s:6:"myName";s:14:"Random Visitor";s:5:"myAge";i:59;}'
Ich habe die Client-Bibliothek für Symfony an meine Namespaces angepasst und einen Autoloader hinzugefügt, der meinen Namespace dem serialized string hinzufügt. Das klappt so, ist aber nicht ganz so schön.

Wenn ich an das API von Kaltura nichts ändern kann, dann kann ich auch an der Client-Bibliothek nichts ändern (außer den Weg den ich jetzt gehe), um mit Namespaces arbeiten zu können. Habe ich das so richtig verstanden oder kann ich doch die Client-Bibliothek so verändern, dass ich Namespaces verwenden kann ohne den serialized String abzuändern?
DerJoghurt ist offline   Mit Zitat antworten
Alt 13.04.2011, 11:21  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.235
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Du bist nicht gewzungen mit Namespaces zu arbeiten. Auch Symfony sollte es ermöglichen, Klassen ohne Namespaces irgendwie einzubinden.. Wie genau, da müsst ich selbst nachgucken. In jedem Fall kannst du einen ganz eigenen Autoloader in der SPL registrieren, der nur für diese Klassen ohne Namespaces gut ist. Dass du Klassen mit Namespaces benutzt zwingt dich nicht dazu, alles in irgendeinen Namespace zu packen. Insofern war das mit dem Anpassen wohl überflüssig und damit sollte sich dein hausgemachtes Problem in Luft auflösen.

Ja, es ist nicht schön, was aus dem gliobalen Namespace zu laden, wenn man alles hübsch in Namespaces verpackt hat. Aber es geht nunmahl.

So du dich in einem Namespace befindest, kommst du mittels Backslash sozusagen raus.

Code:
namespace foo;

class Bar {
  function getDate() {
    return new \ DateTime(); // globaler Namespace (Leerzeichen nur damits Board richtig darstellt)
  }
}
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 13.04.2011, 16:50  
Neuer Benutzer
 
Registriert seit: 12.04.2011
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
DerJoghurt befindet sich auf einem aufstrebenden Ast
Standard

Ich habe es jetzt so gemacht, wie du es gesagt hast, mepeisen.
Ich verwende Namespaces für alle Klassen die ich von außen aufrufen möchte und lade aber alle anderen Klassen über die Autoloader-Funktion ohne Namespace nach. So funktioniert es und so möchte ich es haben.

Bei meinem Beispiel im ersten Post, muss also nur der Namespace aus der Datei "SerializationTest.php" entfernt werden und das Beispiel funktioniert.

Ich habe viel über Namespaces gelernt, vielen Dank an alle die mir geholfen haben.
DerJoghurt ist offline   Mit Zitat antworten
Antwort


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
namespaces und require reliC PHP Einsteiger 3 10.03.2011 08:38
Bestehendes Objekt in einer inkludierten File Nutzen MLang PHP Einsteiger 6 25.02.2011 15:45
Rückgabe von mysql_fetch_object kein Objekt mehr ? Heurazio PHP Einsteiger 8 10.12.2010 13:05
Objekt in Session-Array ablegen mupilz PHP-Fortgeschrittene 2 30.08.2010 17:25
[Erledigt] Problem beim dynamischen Erweitern von Arrays in Object Porperties dille001 PHP Tipps 2010 3 24.05.2010 11:52
Ergebnis einer Datenbankabfrage als Objekt chunky PHP Tipps 2010 7 27.01.2010 21:38
Objekt per Klassenmethode löschen Ti-Systems PHP Tipps 2010 4 20.01.2010 19:28
[Erledigt] Objekt Iteration Löschmethode stayInside PHP-Fortgeschrittene 10 29.11.2009 15:07
Objekt löschen via Methodenübergabe desselben nikosch Software-Design 19 01.06.2009 00:38
[Erledigt] Objekt an Konstruktor übergeben hawkeye78 PHP Tipps 2009 7 28.02.2009 19:01
Objekt im GET-Query wird nicht übertragen Ralpho PHP-Fortgeschrittene 10 05.05.2008 10:03
[Erledigt] PHP5 OOP Zugriff aus einem Objekt auf ein externes Objekt PHP Tipps 2006 5 28.01.2006 16:05
Objekt übergeben Fatal Error PHP Tipps 2007 5 28.12.2005 14:43
kann sich ein Objekt selbst serialisieren? ajo_silent PHP Tipps 2005-2 24 27.06.2005 09:13
Immer noch Probleme mit serialize und unserialize PHP-Fortgeschrittene 13 15.08.2004 13:15

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php unserialie get, unserialie __autoload before

Alle Zeitangaben in WEZ +2. Es ist jetzt 01: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