Class1 element gebruiken door ander class2 in die class1

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Beuserie Cedric

Beuserie Cedric

30/06/2010 22:53:29
Quote Anchor link
Waardes grijpen van ander class

Halo,

Ik wil een element van de eerste class gebruiken maar hij vind die niet,
Ik heb dat al is gedaan, heb die script afgebroken, en vind het verschil niet...
Nu wou ik weten wat ik verkeerd doe?
Dit is nu simpel voorgesteld:

bestand: "index.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
include('./Main.php');
$Main= new Main;
?>


bestand: "Main.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Main{
    private $sub;
    public function __construct(){
        include('./Subclass.php');
        $this->sub = new Subclass;
    }

    public function echo_ed($waarde){
        echo $waarde;
    }
}

?>


bestand: "Subclass.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
class Subclass{
    public function __construct(){
        /*Vanuit deze class wil ik waardes doorgeven terug aan "Main"*/
        global $Main;
        $Main->echo_ed('ok');
    }
}

?>


Fatal error: Call to a member function echo_ed() on a non-object in D:\wamp\www\Subclass.php on line 6

Gr
Cédric
 
PHP hulp

PHP hulp

19/04/2024 11:07:41
 
Niels K

Niels K

30/06/2010 23:01:36
Quote Anchor link
extend?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

class Subclass extends main
{

}


?>
Gewijzigd op 30/06/2010 23:04:09 door Niels K
 
Beuserie Cedric

Beuserie Cedric

30/06/2010 23:11:49
Quote Anchor link
halo

Hier is update script/

bestand: "index.php" blijft hetzelfde.

bestand: "Main.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Main{
    private $sub;
    private $Element = array();
    public function __construct(){
        include('./Subclass.php');
        $this->sub = new Subclass;
    }

    public function __destruct() {
        print_r($this->Element);
    }

    public function echo_ed($waarde){
        $this->Element[] = $waarde;
    }
}

?>


bestand: "Subclass.php" blijft het zelfe en of met "extends main"

Nu,
als ik zonder extends doe krijg je
Fatal error: Call to undefined method Subclass::echo_ed() in D:\wamp\www\Subclass.php on line 6

En als je met extends doet, echo'd hij 2maal...

En moet maar 1x echo'en.
gr
Cédric
 
Beuserie Cedric

Beuserie Cedric

30/06/2010 23:30:57
Quote Anchor link
ok,

$Main = new Main; < betekend dat hij nog aan het maken is. dus bestaat nog niet...
Daarom dat hij die waarde/element nog niet vond.

fix:
bestand: "index.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
include('./Main.php');
$Main= new Main;
$Main->startup();
?>

bestand: "Main.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Main{
    private $sub;
    private $Element = array();
    public function startup(){
        include('./Subclass.php');
        $this->sub = new Subclass;
    }

    public function __destruct() {
        print_r($this->Element);
    }

    public function echo_ed($waarde){
        $this->Element[] = $waarde;
    }
}

?>

bestand: "Subclass.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class Subclass{
    public function __construct(){
        global $Main;
        $Main->echo_ed('ok');
    }
}

?>


Getest: en werkt.
Sorry voor uw tijd.

gr
Cédric
 
- -

- -

30/06/2010 23:44:15
Quote Anchor link
Wat doe je, wat doe je, WAT DOE JE!

Waarom zou je het niet zo doen:

Index
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
include('Main.php');

$Main= new Main;
?>


Main
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Main
{
    private $sub;
    private $Element = array();

    public function __construct()
    {

        include( 'Subclass.php' );
        $this->sub = new Subclass;
    }


    public function __destruct()
    {

        print_r( $this->Element );
    }


    public function echo_ed( $waarde )
    {

        $this->Element[] = $waarde;
    }
}

?>


Subclass
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
class Subclass extends Main
{
    public function __construct()
    {

        $this->echo_ed( 'ok' );
    }
}

?>


Werkt en toch een stukkie netter..

Suc6!
 
Beuserie Cedric

Beuserie Cedric

30/06/2010 23:47:06
Quote Anchor link
Nee,
Dan print hij tweemaal:
Array ( ) Array ( [0] => ok )

en dat is niet de bedoeling...
gr
 

30/06/2010 23:48:44
Quote Anchor link
Een klasse binnen een klasse includen is ook niet echt net.
 
Beuserie Cedric

Beuserie Cedric

30/06/2010 23:51:53
Quote Anchor link
Hoe moet ik het dan splitsen?
Want wil,
MYSQL
en andere elementen apart houden zodat het netter is.
anders zit je met 1000lijnen in 1 file...

en met "extends Main" print hij het 2maal..

gr
Cédric
 
- -

- -

01/07/2010 00:00:45
Quote Anchor link
Ik denk dat je maar een naar de design pattern Model View Controller (MVC) moet gaan kijken.

( http://www.phpro.org/tutorials/Model-View-Controller-MVC.html )
 
Johan Dam

Johan Dam

01/07/2010 10:00:20
Quote Anchor link
Bij extend zal hij inderdad 2x printen omdat de sub de main zal aanroepen, main zal dus 2x uitgevoerd worden,

haal de sub uit de main, zet er extend achter, haal $main = new $main weg en maak er $sub = new $sub van, dan kan $sub alles wat $main kan (en eventueel nog meer)
 
Pim -

Pim -

01/07/2010 15:09:12
Quote Anchor link
Karl Karl op 30/06/2010 23:48:44:
Een klasse binnen een klasse includen is ook niet echt net.


Ooit ZF sources doorgelezen?
 

01/07/2010 15:33:35
Quote Anchor link
Pim de Haan op 01/07/2010 15:09:12:
Karl Karl op 30/06/2010 23:48:44:
Een klasse binnen een klasse includen is ook niet echt net.


Ooit ZF sources doorgelezen?


Nee, want ZF is kut.
En op deze manier is het sowieso kut, gewoon include buiten je klasse doen.
Bij een taal zoals java kan het wel (inner classes dus).
Als je het wilt gebruik op z'n minst dan autoload.
Heus, het kan wel, maar dus of het net is... Ik vind van niet.
Gewijzigd op 01/07/2010 15:39:44 door
 
Jan Koehoorn

Jan Koehoorn

01/07/2010 15:34:29
Quote Anchor link
Karl Karl op 30/06/2010 23:48:44:
Een klasse binnen een klasse includen is ook niet echt net.

Het mag, maar het kan handiger. Bijvoorbeeld door een nette autoload function te schrijven en die met spl_autoload_register te registreren.
 
Pim -

Pim -

01/07/2010 15:47:05
Quote Anchor link
Wat is er precies 'kut' aan het Zend Framework? Zeker bepaalde delen zijn heel nuttig.
 
Mark PHP

Mark PHP

01/07/2010 15:54:09
Quote Anchor link
Pim de Haan op 01/07/2010 15:47:05:
Wat is er precies 'kut' aan het Zend Framework? Zeker bepaalde delen zijn heel nuttig.
Het Zend Framework is ontzettend uitgebreid en kan bijna alles, maar dit brengt een aardige overhead met zich mee en de performance is daardoor -zeker zonder cache- om te janken.

Daarnaast vind ik dat op OOP-gebied het framework vaak de gemakkelijke weg neemt (lees: te snel statische methoden gebruikt).
 

01/07/2010 16:05:52
Quote Anchor link
Mark van Seventer op 01/07/2010 15:54:09:
Pim de Haan op 01/07/2010 15:47:05:
Wat is er precies 'kut' aan het Zend Framework? Zeker bepaalde delen zijn heel nuttig.
Het Zend Framework is ontzettend uitgebreid en kan bijna alles, maar dit brengt een aardige overhead met zich mee en de performance is daardoor -zeker zonder cache- om te janken.

Daarnaast vind ik dat op OOP-gebied het framework vaak de gemakkelijke weg neemt (lees: te snel statische methoden gebruikt).

Inderdaad, ik vind het te groot, te log en dat ze soms ontzettend smerige hacks gebruiken.
Ook vind ik het maar niks dat als je één simpel ding wilt, dat je dan allerlei omwegen moet gebruiken. Ook vind ik het niet handig in onderhoud.
 
Beuserie Cedric

Beuserie Cedric

02/07/2010 03:48:21
Quote Anchor link
Martijn Boshoven op 01/07/2010 00:00:45:
Ik denk dat je maar een naar de design pattern Model View Controller (MVC) moet gaan kijken.

( http://www.phpro.org/tutorials/Model-View-Controller-MVC.html )

Dankjewel voor deze link, dat is wat ik nodig had.

Topic closed.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.