PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OOP Variablen aus einem anderen Klasse benutzen



Brocki
30-03-2006, 17:01
Hi Zusammen!

Mein Ziel ist es ein Objekt "stat" (statistic) zu bauen.
Darin soll es das Object "myOverview" geben.
also:


$stat = new statistic();
$stat->myOverview = new Overview();


das Objekt stat hat die Variablen $stat->begin und $stat->end.

Nun zu meiner eigentlich Frage:
Wie kann ich innerhalb von Overview auf die Werte von $stat zugreifen?
Denn eine Methode von Overview benötigt $stat->begin und $stat->end. Ich möchte diese Werte aber ungern beim Aufuf mitgeben müssen und hätte sie gerne automatisch ausgelesen.
Was müsste ich dafür in die Klasse schreiben (Wenn es überhaupt geht)?

Hier mal die Klassen skiziert:



class Statistic{
var $begin;
var $end;
function statistic(){
echo 'foof';
}
}

class Overview{
function show()
echo 'HIER BENÖTIGE ICH DAS BEGIN UND END AUS STATISTIC';
}
}


Vielleicht hat ja Jemand eine Idee, wie ich das ganze realisieren könnte.
Viele liebe Grüße und vielen Dank,
Brocki

undefined
30-03-2006, 18:44
<?php
error_reporting( E_STRICT );

class Statistic
{
private $begin;
public $end = "ENDE";
static function getParam()
{
return 'foof';
}
}

class Overview
{
public function show()
{
return Statistic::getParam();
}

public function nostatic()
{
$n = new Statistic;
return $n->end;
}
}

$new = new Overview;

var_dump( $new->show(), $new->nostatic() );

?>

Brocki
30-03-2006, 18:56
Vielen Dank!
Das sollte so hinhauen.
Ich wäre nie auf die Idee gekomen eine Methode zu basteln, die mir die gewünschten Werte ausgibt.
Ich dum****** :)

Ich finde den Weg zwar etwas umständlich, da man ja nur mithilfe einer Methode auf den Wert zugreifen kann aber es geht wohl nicht anders.

Nochmals vielen Dank und schönen Abend noch!
Brocki

undefined
30-03-2006, 19:14
Das liegt an den gegebenheiten von PHP.
Du kannst in einer Static Methode keine weiteren Methoden Includen. das spricht gegen die Logik ;) Ein weiteres Beispiel nicht die feine Art


<?php
error_reporting( E_ALL | E_STRICT );

class MainClass
{
public static $my_static = 'foo';
}

class Overview
{
public function __get( $i )
{
return MainClass::$$i;
}

}

$new = new Overview();

var_dump( $new->my_static );

?>

Brocki
30-03-2006, 19:50
Hi,
leider habe ich mich zufrüh gefreut....

Folgendes Problem:


<?php
class Statistic {
var $begin;
var $end;
function show_vars() {
echo $this->begin . $this->end;
}
}

class Overview {
function show_vars2() {
Statistic::show_vars()
}
}

$myStat = new Statistic();
$myStat->begin = '12:00';
$myStat->end = '13:00';
$myStat->overview = new Overview();
$myStat->overview->show_vars2()
?>

Leider gibt er nichts aus. Mein Ziel war es aber 12:00 und 13:00 ausgeben zu bekommen. Geht das überhaupt? Also Werte vom übergeordnetem Objekt in einer Klasse benutzen :) (Klingt irgendwie sehr böse bzw. falsch)

Grüße und vielen Dank!
Brocki

Romanday
30-03-2006, 22:27
Hi,
Leider gibt er nichts aus. Mein Ziel war es aber 12:00 und 13:00 ausgeben zu bekommen. Geht das überhaupt? Also Werte vom übergeordnetem Objekt in einer Klasse benutzen :) (Klingt irgendwie sehr böse bzw. falsch)

Grüße und vielen Dank!
Brocki

Warum so umständlich?
Erweitere deine Hauptklasse mit extends und Du hast weniger Sorgen.

undefined
30-03-2006, 23:07
Ja aber erst ab PHP5 - so lange must du wie von Romanday schon geschrieben - erben.
<?php error_reporting( E_ALL | ~E_STRICT ); class Statistic { var $begin; var $end; function Statistic() {} function show_vars() { echo $this->begin . $this->end; } } class Overview extends Statistic { function Overview() { parent::Statistic(); } } $myStat->overview = new Overview(); $myStat->begin = '12:00'; $myStat->end = '13:00'; var_dump( $myStat->end ); ?>

undefined
30-03-2006, 23:10
Also der Forenbug mit UTF-8 und Ajax geht mir so langsam auf den Sack :<( Ab sofort mach ich für jede Korrektur einen neune beitrag auf :mad:


<?php
error_reporting( E_ALL | ~E_STRICT );

class Statistic
{
var $begin;
var $end;
function Statistic() {}
function show_vars() {
echo $this->begin . $this->end;
}
}

class Overview extends Statistic
{
function Overview()
{
parent::Statistic();
}
}


$myStat = new Overview();
$myStat->begin = '12:00';
$myStat->end = '13:00';
var_dump( $myStat->end );

?>

Brocki
30-03-2006, 23:20
Vielen Dank aber trotzdem schade ...
Erben macht keinen Sinn, da ich mir sonst zuviel Kram mitschleppe. Ich hätte anstatt nur 3 Werte doppelt ca. 8 Werte und 9 Methoden doppelt obwohl ich sie nur einmal brauche. Das fände ich doch sehr unsauber.

PHP5 kann ich leider auch nicht einsetzen, da auf der Produktivmaschine leider nur PHP4 läuft und der andere Geraffel angeblich nicht mit PHP5 läuft...

So übergebe ich halt die Werte beim Erstellen der Objekte. (Ist, wie ich finde, eine Fehlerquelle mehr)

Viele liebe Grüße und vielen Dank für eure Mühe,
Brocki

undefined
31-03-2006, 08:02
Nun ja - als Fehlerquelle würde ich so etwas nicht bezeichnen.
Es liegt halt an der Entwicklungsstufe. Die richtigen einzug in OOP wurde bei PHP erst ab Version 5 vollzogen.
Wenn ich mal als Beispiel PHP XML/XSLT Programm nehme so hatte ich unter PHP4 in etwa 300 Zeilen für ein Script. Unter PHP 5 benötige ich weniger als die hälfte davon.

Brocki
31-03-2006, 12:24
Und nun der vollständigkeits halber:
Wie würde mein Vorhaben in PHP5 aussehen? (würde mich einfach mal interesieren, auch wenn es für das Projekt unerheblich ist)

Grüße,
Brocki

undefined
31-03-2006, 14:55
Eigentlich müsten die obigen Beispiele schon reichen ;)
Hier mal noch ein Beispiel.


<?php
error_reporting( E_ALL | E_STRICT );

final class Zeiten
{
public static function Europe()
{
setlocale( LC_TIME, 'de_DE' );
date_default_timezone_set( 'Europe/Berlin' );
return strftime( "%T", time() );
}

public static function England()
{
setlocale( LC_TIME, 'en_GB' );
date_default_timezone_set( 'Europe/Dublin' );
return strftime( "%T", time() );
}

public static function Amerika()
{
setlocale( LC_TIME, 'en_US' );
date_default_timezone_set( 'America/New_York' );
return strftime( "%T", time() );
}
}


class Kalender
{
public function WeltZeit()
{
return "In Berlin ist es "
. Zeiten::Europe()
. " in Dublin "
. Zeiten::England()
. " und in New York " . Zeiten::Amerika();
}
}


$kl =& new Kalender;
echo $kl->WeltZeit();

?>

Romanday
31-03-2006, 19:03
Also der Forenbug mit UTF-8 und Ajax geht mir so langsam auf den Sack :<( Ab sofort mach ich für jede Korrektur einen neune beitrag auf :mad:


Was soll den das für ein Bug sein?

Ändern kannst du auch später eine Nachricht.
Bei deiner ersten Nachricht hast deinen Code in CODE geklammert
beim zweiten in PHP.
CODE wird nach <pre> übersetzt (Default Einstellung), daher die endlos
Zeile.

undefined
31-03-2006, 22:53
http://www.linuxforen.de/forums/showthread.php?t=199074