na ja,
ich bin damit auch nicht besonders glücklich.
und Casting gehört eben zu OOP.
ich kann auch nicht wirklich nachvollziehen warum in Java und PHP mehrfache Vererbung abgeschafft bzw nicht verfolgt wurde, was in C++ perfekt funktioniert.
Jetzt kämpfen gerade die Programmierer, mit Decorator Paten, statt einer direkter Vererbung von einer 2ter classe zu machen.
Beweis dafür ist JavaSwing bei dem die hälfte von komponenten ohne jeglicher Veränderung von anderen classen übernommen sein könnten.
statt dessen müssten die Programmierer bei jeder neuer Komponente ein decorator machen, bzw zusätzlicher Interface ableiten, was natürlich Arbeitsaufwand steigert als auch die netz von UML diagrammen so wachsen lässt, dass kein Mensch von diesen unübersichtlichen diagrammen profitiert.
[OOP] Beliebige Type Casts
Einklappen
X
-
irgendwie kann ich schon damit leben, aber es schränkt einen
ungemein ein, wenn man sauberes OOM machen will =(
Einen Kommentar schreiben:
-
Habe gerade wohl Polymorphie und Mehrfachvererbung in einen Topf geworfen. Aber mit dem fehlenden Casting kann und wird man in PHP leben müssen.
Einen Kommentar schreiben:
-
Ja, wie ich auch erwartet habe funktioniert casting auch in C#
PHP-Code:public class test{
static void Main(string[] args){
Class2 c=new Class2();
//hier kommt es zu ausgabe "Class1" da es gekastet wurde
Console.Write(((Class1)c).t1());
Console.Read();
}
}
public class Class1
{
public Class1(){}
public string t1(){ return "Class1";}
}
//vererben
public class Class2 : Class1
{
public Class2(){}
public string t1(){ return "Class2";}
}
Einen Kommentar schreiben:
-
Hi combie
Java macht das garantiert.
Ob das C# macht, muss ich gleich testen, aber ich bin mir sicher, dass C# das auch wie java unterstützt.
nach dem testen sage ich wegen c# bescheid.
Einen Kommentar schreiben:
-
ohne dann die polymorphie vollständig zu unterstützen.
Selbst so moderne Sprachen wie Java machen das nicht.
Einen Kommentar schreiben:
-
is ja schön das du das ok findest, jedoch find ich es ziemlich dämlich
in einer programmiersprache interfaces und vererbung anzubieten,
ohne dann die polymorphie vollständig zu unterstützen.
Und casting is da einfach ne essentielle komponente.
@ Slava
/signed
naja damit wäre ja dann meine frage diesbezüglich wohl beantwortet.
ich bedanke mich und werde einfach mein modell ein wenig abändern,
also anstatt einer get row eine fetchRow methode anbieten, die eine kopie der geforderten Row ausgibt, und weiterhin eine set(r,c) und get(r,c) methode zum lesen und setzen der werte meiner tabelle
verwenden
Einen Kommentar schreiben:
-
PHP-Code:class t1 {
function f1(){echo 't1';}
}
class t2 extends t1{
function f1(){echo 't2';}
}
$t=new t2;
function test(t1 $var)
{
$var->f1();
}
test($t);
Einen Kommentar schreiben:
-
Die Möglichkeit eigene Typecast zu definieren (neben __toString auch noch __toInt / __tot1) wurde für PHP 6 leider abgelehnt ...
Einen Kommentar schreiben:
-
was mich aber bei PHP ein wenig ergert, dass es wirklich in vergleich zu den anderen sprachen nicht jeder casting funktioniert.
ich finde das nicht gut, dass ich ein object nicht auf seine basisclasse kasten kann, was natürlich bei C#.Java, C++ problemlos funktioniert.
PHP-Code:class t1 {
function f1(){echo 't1';}
}
class t2 extends t1{
function f1(){echo 't2';}
}
$t=new t2;
//das wird bei php5.1 nicht funktionieren
//ich kann hier nur auf Array, String oder Object casten, aber nicht auf die
//basisclasse
$a= (t1)$t;
Einen Kommentar schreiben:
-
edit: das null objekt als entwurfsmuster gibt es in php
PHP ist in dem Punkt leider etwas krank(finde ich)..
Das Handbuch sagt:
Type Hints can only be of the object and array (since PHP 5.1) type.
PHP-Code:class bli {}
class test
{
public function bla( bli $var=NULL)
{
echo 'hello bla ';
}
public function blu( bli $var)
{
echo 'hello blu ';
}
}
$t = new test;
$b = new bli;
$t->bla(NULL); // funktioniert
$t->blu(NULL); // wirft Fehler
Aber machmal eben doch
Warum einmal NULL verwendet werden darf und das andere Mal nicht, sehe ich nicht ein!
(aber wieder was dazu gelernt)Zuletzt geändert von combie; 11.10.2007, 11:39.
Einen Kommentar schreiben:
-
Original geschrieben von combie
RowData $r=null
Nein, Es gibt keine Null Objekte in PHP!
Einen Kommentar schreiben:
-
OffTopic:
hab ich auch nie behauptet
jedoch kann $r den wert null annehmen...
zudem kann ich nur sagen: works as designed
wenn ich addRow() aufrufe wird ganz normal ne Row eingefügt
edit: das null objekt als entwurfsmuster gibt es in phpZuletzt geändert von BugBite; 10.10.2007, 22:28.
Einen Kommentar schreiben:
-
RowData $r=null
Nein, Es gibt keine Null Objekte in PHP!
Einen Kommentar schreiben:
Einen Kommentar schreiben: