Bonsoir,

J'essaie de manipuler les namespaces et/ou l'autoload.

J'ai 3 dossiers imbriqués avec des classes à l'intérieur
Nom : imbriquation.PNG
Affichages : 573
Taille : 2,8 Ko

A contient B et index.php
B contient C et la classe Point.php
C contient la classe Triangle.php

J'essaie dans un premier temps, d'utiliser un namespace pour chaque classe appartenant à un dossier.

index.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
<?php
namespace A;
 
use \B\Point;
use \C\Triangle;
 
include '.\B\Point.php';
include '.\B\C\Triangle.php';
 
 
 
 
	//spl_autoload_extensions(".php,.inc");
	//spl_autoload_register();
 
	/*spl_autoload_register(function($class)
	{
		include 'A/B/C/' .$class . '.class.php';
	});*/
 
 
	$p = new Point(5, 11);
	echo $p->getX();
 
	$t = new Triangle(1,1,2,2,2,1);
 
	var_dump($t);
?>
Point.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
<?php
namespace B;
 
class Point
{
    private $x;
    private $y;
 
    public function __construct($x, $y) 
    { 
        $this->setX($x);
        $this->setY($y);
    }
 
    public function setX($x)
    { 
        $this->x = $x;
    }
 
    public function getX()
    { 
        return $this->x;
    }
 
    public function setY($y)
    { 
        $this->y = $y;
    }
 
    public function getY()
    { 
        return $this->y;
    }
}
 
?>
Triangle.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
namespace C;
 
use B\C\Point;
 
class Triangle
{ 
    private $pt = [];
 
    public function __construct($x1, $y1, $x2, $y2, $x3, $y3) 
    { 
        $this->pt[] = new Point($x1, $y1);
        $this->pt[] = new Point($x2, $y2);
        $this->pt[] = new Point($x3, $y3);
    }
     //...
}
?>
J'ai ceci comme erreur jusqu'à maintenant
Nom : erreur.PNG
Affichages : 566
Taille : 15,6 Ko

Je suppose que je dois utiliser new \B\Point($x1, $y1);.

Mais après avoir passé la soirée là-dessus, je n'arrive à rien.

N'y a t'il pas moyen de n'utiliser que l'autoload, pour charger les classes qui sont appelées dans index.php? Donc sans utiliser de namespace ?

Mon but final étant de corriger les différents scripts afin que index.php s'exécute sans erreur.