php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.10.2007, 16:13  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard statische Eigenschaft einer unbekannten Klasse aufrufen

Hallo,
Wie kann ich die statische Eigenschaft abrufen, von dessen Klasse ich nur ein Objekt habe, ohne E_STRICT zu verletzen, das heißt die statische Eigenschaft auch wie eine Klasseneigenschaft und nicht wie eine Objekteigenschaft abzurufen (T_PAAMAYIM_NEKUDOTAYIM).

Wie komme ich drauf?
Ich habe eine abstrakte TextControl-Klasse, die eine statische factory-Methode hat, die je nach Parameter ein Objekt der TextControl_Mysql oder ein TextControl_Oci8 zurückliefert.

In der abstrakten Klasse TextControl stehen einige protected static (also Klasseneigenschaften) Variablen mit Standard-SQL-Statements.

Nun können TextControl_Oci8 oder TextControl_Mysql diese Standard-SQL-Statements durch spezifische überschreiben und an genau diese möchte ich jetzt von außen heran.

(Allerdings nur zu Debug-Zwecken und aus Interesse)

PHP-Code:
<?php
$tc 
TextControl::factory($db);
echo 
$tc->$sql_langExists// Aufruf als Objekteigenschaft, verletzt E_STRICT
echo TextControl_Mysql::$sql_langExists// das möchte ich (wenn get_class($tc) = TextControl_Mysql wäre)
echo get_class($tc)::$sql_langExists// geht nicht
$class get_class($tc);
echo 
$class::$sql_langExists// T_PAAMAYIM_NEKUDOTAYIM-Fehler
echo {$class}::$sql_langExists// {-Parse-Error;
?>
Achso: Ohne eval() oder Reflections.
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 11.10.2007, 16:28  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

hi,

gibt es die variable $sql_langExists? denn

PHP-Code:
$sql_langExists='test';
$tc->$sql_langExists
würde $tc->test aufrufen (variabler klassen var aufruf)

andererseits würde

PHP-Code:
echo TextControl_Mysql::$sql_langExists
die variable $sql_langExists von TextControl_Mysql aufrufen

p.s.: wenn das dein code ist, einige dich beim coden ob du kleinGross oder klein_gross schreibst, aber nicht vermischen....
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 11.10.2007, 16:49  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Die Klasseneigenschaft heißt sql_langExists, wird also wie folgt definiert
PHP-Code:
<?php
protected static $sql_langExists "..";
?>
Zitat:
würde $tc->test aufrufen (variabler klassen var aufruf)
Stimmt hast du Recht, weiß ich eigentlich, ging da jetzt auch nur unter im Testmarathon.

Zitat:
wenn das dein code ist, einige dich beim coden ob du kleinGross oder klein_gross schreibst, aber nicht vermischen....
Sollte deutlicher abgrenzen, aber hast du Recht.


Geht mir jetzt auch grundsätzlich nur darum ob es möglich ist. Ich denke nein oder?
call_user_func() läßt sich ja nicht zum Eigenschaften auslesen mißbrauchen oder?
Zergling-new ist offline   Mit Zitat antworten
Alt 11.10.2007, 16:55  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Zergling
Geht mir jetzt auch grundsätzlich nur darum ob es möglich ist. Ich denke nein oder?
call_user_func() läßt sich ja nicht zum Eigenschaften auslesen mißbrauchen oder?
ohne eval und ohne reflection? nein, ich hab auch ein bisschen was probiert, aber nö hab auch nur fehler bekommen.
brian johnson ist offline   Mit Zitat antworten
Alt 11.10.2007, 18:04  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

OK danke für deine Meinung, habe u.a. die Variablen entsprechend umbenannt
Zergling-new ist offline   Mit Zitat antworten
Alt 11.10.2007, 19:37  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Da wars wieder. eval () oder verzweifeln, such Dir was aus.
Ich hatte ja neulich nen Hoffnungsschimmer, als Doc E. mir diese simple Klammervariante ( $sClassname::{$sMethodname}; ) vorgeschlagen hat. Manchmal sind die einfachsten Notationen ja diejenigen, die man übersieht. Aber leider - Pustekuchen. Falls das überhaupt funktioniert, dann nur für statische Methoden.
nikosch ist offline   Mit Zitat antworten
Alt 11.10.2007, 21:10  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo nikosch77,

da ihr hier alle schon so verzweifelt seit, hier ein Stück Code, das ich so ähnlich in meinem PageController habe. Und der funktioniert.

PHP-Code:
<?php
   
class testclass
   
{

      function 
testclass(){
      }

      function 
mymethod(){
         return 
'mymethod';
      }

   }

   
$classname 'testclass';
   
$method 'mymethod';

   
$object = new $classname;
   echo 
$object->{$method}();
?>
Ich sollte mir ein "eval = evil" in die Signatur schreiben.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 11.10.2007, 21:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Und wiederum bleibt zu sagen: es geht hier um den Zugriff auf ein statisches Klassenmember, nicht auf eine Methode.

PHP-Code:
<?php

class testclass
   
{
   static 
$testmember 1;

   static function 
testmethod()
      {
      echo 
self::$testmember;
      }
   }


$classname 'testclass';
$testmethod 'testmethod';


// funktioniert
testclass::$testmember 2;

// funktioniert nicht
// $classname::$testmember = 3;

// funktioniert nicht
// $classname::{$testmember} = 4;



// funktioniert
testclass::testmethod ();

// funktioniert nicht
// $classname::testmethod ();

// funktioniert nicht
// $classname::{$testmethod}();

// funktioniert nicht
// testclass::{$testmethod}();

// funktioniert
testclass::${testmethod}();

?>
nikosch ist offline   Mit Zitat antworten
Alt 11.10.2007, 22:29  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch77
Und wiederum bleibt zu sagen: es geht hier um den Zugriff auf ein statisches Klassenmember, nicht auf eine Methode.
jap und wie du in deinem beispiel zeigst, kennt er den klassennamen nicht.
brian johnson ist offline   Mit Zitat antworten
Alt 11.10.2007, 22:33  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Ich habe das Beispiel auf deinen letzten Satz gepostet, sorry da muss ich wohl einen Teil überlesen haben. Hier würde sich dann evtl. anbieten eine statische Wrapper-Methode zu implementieren, die einen Klassenmember ausliest. Dann klappt mein Beispiel auch. Mehr fällt mir nicht mehr ein und ich halte jetzt besser meinen Mund.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. 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
Protected Eigenschaft in der eigenenen Klasse nicht anpre... HStev PHP-Fortgeschrittene 2 30.05.2008 18:47
funktion innerhalb einer Klasse mit call_user_func aufrufen phpbeginner PHP Tipps 2008 8 22.05.2008 16:20
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
funnktion aus klasse aufrufen nieselfriem PHP Tipps 2008 3 05.01.2008 14:35
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
Singleton besser als komplett statische Klasse ? Cmon PHP-Fortgeschrittene 4 13.06.2006 00:34
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Klasenname einer nicht instanziierten Klasse DerDesian PHP Tipps 2007 9 30.11.2005 13:13
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Funktion einer Klasse über Link aufrufen? MortakArtos PHP Tipps 2004-2 4 18.11.2004 12:05
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php statischer aufruf, t_paamayim_nekudotayim php 5.2, statischer aufruf php, paamayim nekudotayim php 5.2.0-8, php statische aufrufe, php 5.2 t_paamayim_nekudotayim, reflection static eval, php paamayim_nekudotayim 5.2, get_class t_paamayim_nekudotayim, dynamische statische aufrufe php, statische aufrufe php, auf statische eigenschaften dynamisch zugreifen php, php eval klassen aufrufen, t_paamayim_nekudotayim, paamayim nekudotayim php 5.2, php statische eigenschaften, php unbekannte methode ausführen, php unbekannte methode aufrufen, php eigenschaft einer klasse aufrufen, php 5.2 variable t_paamayim_nekudotayim

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