Понятия не имею, как сформулировать этот вопрос в поисковой системе.
Я немного запутался, как классы используют методы других классов без include / require. Я видел это в PHP пару раз. Исходя из фона C ++, мне пришлось включить все, чтобы использовать его, так что это немного сбивает с толку.
Но хорошо, мы идем:
Скажи, что у меня есть 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;
}
}
new Pos_MysqlImprovedResult
является экземпляром класса Pos_MysqlImprovedResult
, а не Impro_DB_Connection. Не объявляя функцию include
для включения класса Pos_MysqlImproveResult
, файл improve_db_connection.php
просто знает, где находится класс.
Это потому, что Pos_MysqlImproveResult.php
находится в том же каталоге, что и improve_db_connection.php
?
То же самое с Zend Framework. Но файлы есть в подкаталогах и тому подобное. У меня есть класс в application/modules/SF/models
, который использует другую функцию класса, которая находится в application/modules/SF/models/resources
. Это из-за соглашения об именах этих классов Zend, что Zend просто анализирует эти файлы и добавляет его в php __autoload
?