[PHP] OOP $object extends $object

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 12-10 08:33
Goedemorgen,

Ik heb volgende code geschreven. Het werkt, zoals ik wil dat het werkt.
Maar is dit de correcte manier ?
* Niet relevante code is weggelaten

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
class Loader{
    public $vars = array();
    public $pointer = array();
    public $p; //objects
    ###############  constructor = bootstrapper
    public function __construct(){
        $this->new_pointer('bootstrapper','template');
        $this->p['bootstrapper']->load();
    }
    ############### CREATE NEW POINTER 
    public function new_pointer($pointer,$controller)
    {
        $this->p[$pointer] = new Pointer($controller,$this);        
    }
    public function get($key){
        if(isset($this->vars[$key]))
            return $this->vars[$key];
        else
            return null;
    }
}
class Pointer{
    private $loader;
    private $file;
    private $folder;
    public function __construct($controller,&$loader){
        // reference to parrent object
        $this->loader = &$loader;
        $this->set_folder($controller);
        $this->set_file('html.php');
    }
    public function load($file=null){
        $pointers = &$this->loader->p;
        foreach($pointers as $name=>&$pointer)
        {
            $$name = &$pointer;
        }
        if($file==null)
        $file = $this->file;
        $folder = $this->folder;
        $lang = $this->get('lang');

        $path = "$folder/$file";
        include($path);
    }

    public function get($key){
        return $this->loader->get($key);
    }
}


manier hoe ik het gebruik
template
PHP:
1
2
3
4
5
6
7
8
in een object van Loader wordt het volgende gedaan:
$this->new_pointer('main','home');

vervolgens in een object van Pointer het volgende:
//bestand 'menu.php' oproepen in map template
$this->load('menu.php');
//html.php oproepen in map home
$main->load();


Ik dacht dat in dergelijke situaties je kon gebruikmaken van extend, maar dat werkt niet, of deed ik het fout?

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 16:51
Wat wil je nou bereiken? Het ziet er maar vaag uit allemaal. Wat wil je extenden? En waarom gebruik je &$loader? Objecten worden al 'by reference' doorgegeven standaard.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En ook niet onbelangrijk: waarom de topictitel? In je code extend je niks. 8)7

Je zou trouwens denken dat je na al die keren dat je op De Quickstart gewezen bent intussen eens door zou hebben hoe topicstarts eruit horen te zien. Code dumpen zonder uitleg en vervolgens vragen "is dit goed?" is niet bepaald constructief... :/

[ Voor 63% gewijzigd door NMe op 06-03-2015 10:41 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 12-10 08:33
Interessant om te weten dat objecten by reference worden doorgegeven.
Is altijd? dus ook in de foreach loop?

in mijn child object wil ik methoden gebruiken uit het parrent object, zie de getter, maar er zijn er nog andere.
Daarom dat ik dacht dat je eigenlijk moet extenden, daarom de topic title. Het werkt, maar het is een vreemde constructie, om het object door te geven, en de methoden op deze manier beschikbaar te maken. Maar dit is dus goed?

Als ik extend krijg ik echt een fout, volgens mij vanwege de constructor van de parrent. Ik snap het niet zo goed.

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Extenden doe je op classes, niet op objecten. En als je alleen gebruik wil maken van een bepaalde klasse in een andere klasse dan heeft dat niks met extenden te maken, dat doe je alleen als je ene klasse een andere klasse is. Car is een Vehicle, Car heeft meerdere Wheels. Je extendt dan Car van Vehicle, maar je extendt zeker geen Car van Wheel.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.