Je ne sais pas comment formuler cette question dans un moteur de recherche.Méthode de classe appelant une autre méthode de classe sans include/require?
Je suis un peu confus comment les classes utilisent les méthodes d'autres classes sans include/require. J'ai vu cela en PHP quelques temps maintenant. Venant de l'arrière-plan C++, j'ai dû tout inclure pour l'utiliser, donc c'est un peu déroutant.
Mais ok on y va:
Dire que j'ai improve_db_connection.php
:
class improve_db_connection
{
protected $_connection;
public function __construct($host, $user, $pwd, $db)
{
$this->_connection = @new mysqli($host, $user, $pwd, $db);
if (mysqli_connect_error()) {
throw new RuntimeException('Cannot access database: ' .
mysqli_connect_error());
}
}
public function getResultSet($sql)
{
$results = new Pos_MysqlImprovedResult($sql, $this->_connection);
return $results;
}
}
Le new Pos_MysqlImprovedResult
est une instance de Pos_MysqlImprovedResult
classe, non improve_db_connection. Sans déclarer la fonction include
pour inclure la classe Pos_MysqlImproveResult
, le fichier improve_db_connection.php
sait simplement où se trouve la classe.
Est-ce parce que le Pos_MysqlImproveResult.php
se trouve dans le même répertoire que improve_db_connection.php
?
C'est la même chose avec Zend Framework. Mais les fichiers sont dans des sous-répertoires et autres. J'ai une classe dans application/modules/SF/models
qui utilise une autre fonction de classe qui est dans application/modules/SF/models/resources
. Est-ce parce que la convention de nommage Zend de ces classes que Zend analyse juste à travers ces fichiers et l'ajoute dans le __autoload
du php?
Et si ce n'est pas une application Zend, il peut toujours utiliser un chargeur automatique qui sera défini quelque part dans l'un des fichiers de script, et peut être lu pour déterminer quels chemins il vérifie avant d'inclure tous les fichiers nécessaires. –