[PHP5] Inheritance/public/parent/interface ?

Pagina: 1
Acties:

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Ik ben momenteel bezig om m'n VirtualFileSystem classje een beetje om te zetten naar OO PHP5 met nette inheritance enzo.

Ik heb m'n code flink wat gestript, en het meest nuttige hieronder neergezet. De code hieronder bestaat uit een VirtualFileSystem object (de root van een directory tree) en een vfsDir object (child van de VirtualFileSystem of van zichzelf bij subdirectories)

Dankzij de mooie __construct leest een VirtualFileSystem in 1x een complete directory structuur in naar een een objectenboom, en kunnen uit de database extra children toegevoegd worden, precies zoals ik het bedoeld had.

Nu komt het probleem: ik wil vanuit *een* (maakt niet uit welke) vsfDirectory object weer terug naar het VirtualFileSystem object referencen. Iets waarvan ik dácht dat het zou moeten kunnen met VirtualFileSystem::getRootDir() (aangezien vfsDirectory ge-extend wordt vanaf VirtualFileSystem, maar die returned... *niets*

Is er hier een expert die me een inzicht kan geven in wat ik fout doe?

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class VirtualFileSystem
{
    public $rootDir, $rootDirectory;

    function __construct($startdir)
    {
        $this->rootDir = $startdir;
        $this->rootDirectory = new vfsDirectory($startdir);
    }

    function getRootDir()
    {
        return ($this->rootDir);
    }
}





class vfsDirectory extends VirtualFileSystem
{
    /* hier wat vars enzow */

    function __construct($dirname, $level=0, $directory = '')
    {   
        $this->parentDir = substr($dirname, 0, strrpos($dirname, '/') +1);
        $this->directory = substr($dirname, strrpos($dirname, '/')+1) ;
        $this->level = $level;
        if ($level == 0) 
        {
            $this->relativeDir = '/';
        }
        else
        {
            throw_error(VirtualFileSystem::getRootDir();
            // hier gaat het dus de mist in. Ik wil vanaf hier naar VirtualFileSystem::getRootDir() terug...
        }
        $this->walk($this->getCurrentDir()); 
    }


    function walk($dirname)
    {
        global $db;
        $dirContent = scandir($dirname);
        $dbcontent = $db->fetchAll("select * from VirtualFileSystem where strSrcDir = '{$dirname}'");
        for ($i=0; $i<sizeof($dirContent); $i++)
        {
            if ($dirContent[$i] != '.' && $dirContent[$i] != '..')
            {
                if (is_dir($this->getCurrentDir().'/'.$dirContent[$i]))
                {
                    $this->subDirs[] = new vfsDirectory($this->getCurrentDir().'/'.$dirContent[$i], $this->level +1); // Recursief tree inlezen
                }
                if (is_file($this->getCurrentDir().'/'.$dirContent[$i]))
                {
                    $this->files[] = new vfsFile($this->getCurrentDir().'/'.$dirContent[$i], $this); // bestanden ook inlezen
                }
            }
        }

        for ($i=0; $i<sizeof($dbcontent); $i++)
        {
            $this->subDirs[] = new vfsSymlink($this, $dbcontent[$i]['strDestName'], $dbcontent[$i]['strDestURI'], $this->level + 1); // dit is het 'virtual' part...
        }
    }

}


uiteindelijk wordt het hele zwikje dan zo opgestart:

PHP:
1
$filesystem = new VirtualFileSystem($_TPL['basedir']);

[ Voor 8% gewijzigd door SchizoDuckie op 16-11-2004 10:35 ]

Stop uploading passwords to Github!


  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 10-05 19:15
in de extended class moet je nog ergens parent::__construct(); aanroepen. de constructor van de parent-class wordt niet automatisch aangeroepen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom instantieer je meteen allemaal directories?
En waarom is een directory een subclass van een virtual file system? In principe is je hele VirtualFileSystem class nu een beetje nutteloos, het doet namelijk weinig behalve een root dir bijhouden, en dat doet een directory ook al (aangezien het een subclass ervan is)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
.oisyn schreef op dinsdag 16 november 2004 @ 10:54:
Waarom instantieer je meteen allemaal directories?
En waarom is een directory een subclass van een virtual file system? In principe is je hele VirtualFileSystem class nu een beetje nutteloos, het doet namelijk weinig behalve een root dir bijhouden, en dat doet een directory ook al (aangezien het een subclass ervan is)
Die automagische walk heb ik er idd alweer uitgesloopt. die zat er even in om te testen, maar ik doe dus fundamenteel iets fout :P
De VirtualFileSystem class is niet nutteloos, er staan hier nog een aantal functies in die class die hier niet nuttig zijn om neer te zetten.

Ik heb nu inderdaad een parent::__construct() erbij staan, maar dan wordt uiteraard de huidige directory ook de parent directory.. :P

Ik ga nog ff m'n brain cracken over hoe ik dit nou op moet lossen, want op de een of andere manier moet ik toch een reference naar dat virtualfilesystem kunnen krijgen zonder elke keer het hele object mee hoeven te passen....
edit:
ik lees nu je opmerking over waarom het een extension is van een virtualfilesystem.. die zal ik er idd ook uitslopen |:(


edit:
Okee. went back to the drawing board :P Ik heb die inheritance er idd uitgesloopt, en een referentie naar het vsf object met de hand mee gepassed... :D

[ Voor 14% gewijzigd door SchizoDuckie op 16-11-2004 11:24 ]

Stop uploading passwords to Github!