Некоторые основные вопросы после просмотра исходного кода CI - PullRequest
6 голосов
/ 08 июня 2011

Я просто смотрел на исходный код CodeIgniter и наткнулся на пару вещей, которые, похоже, не могу понять; Я не уверен, что они имеют в виду, и, поскольку они в основном похожи на один или два символа, их сложно найти в Google и StackOverflow.

Одна вещь, с которой я довольно часто сталкивался, это:

$this->config =& get_config();

Я никогда раньше не сталкивался с =& (или главным образом &) в PHP. Что это значит точно? Они присваивают экземпляр от get_config до $this->config? Я предполагаю, что $this->config взято из объявления вверху файла, где написано var $config = array();

Я искал функцию get_config() и нашел следующую строку:

function &get_config($replace = array())

Здесь мой вопрос почти такой же: что означает & и для чего он нужен? Я вижу эти две вещи (& и =&) во всех файлах ядра CI.

Что-то еще, что меня интересует, это их стиль комментирования. Каждая функция начинается с блока комментария, вот пример:

 /**
 * Set HTTP Status Header
 *
 * @access  public
 * @param   int     the status code
 * @param   string
 * @return  void
 */

Это генерируется каким-нибудь плагином или библиотекой? Похоже, много хлопот сделать это вручную. Я не проверял такие вещи, как PHPDoc, но может ли это быть что-то похожее (или PHPDoc)? Кажется полезным, если он генерирует это автоматически? Heehee.

К следующему вопросу. Я вижу различные функции с префиксом подчеркивания. Есть очевидное __construct, но есть также такие функции, как _set_default_controller(); и _set_routing();. У этих подчеркиваний есть какое-то особое значение? Я знаю, что двойное подчеркивание используется для чего-то, называемого «магическими методами» (я думаю о __get и __set, так как это те, которые я использовал сам). Есть ли у них «особый» технический смысл или это чисто семантика? Просвети меня, если возможно.

И последнее, но не менее важное: в файле ядра контроллера я видел это:

class CI_Controller {

    private static $instance;

    public function __construct()
    {
        self::$instance =& $this;
                // goes on

Интересующая линия здесь self::$instance =& $this; Что это значит? Устанавливает ли он $this в свой экземпляр (wiiiiiild предположения, хаха), чтобы мы могли использовать $ this? Или это не имеет смысла? На самом деле это не так, поскольку в самом простом шаблоне MVC, который я использую для базовых веб-сайтов, я использую $ this без каких-либо дополнительных возможностей.

Может ли кто-нибудь предложить некоторое понимание здесь? Я был бы благодарен. Заранее большое спасибо.

Ответы [ 3 ]

3 голосов
/ 08 июня 2011
3 голосов
/ 08 июня 2011

& для передачи чего-либо по ссылке, что означает, что любые изменения, внесенные в переменную, которой вы ее присвоили, будут влиять на исходную переменную.По сути, он отправляет в ячейку памяти вместо значения.

Вот документацию php.net для ссылок.

Пример:

$foo = 'foo';
$bar = &$foo;
$bar = 'bar';
echo($foo);
//Should output "bar"

Почему это может быть полезно?

function everythingButFirst($s){
    return(substr($s,1));
}

function everythingButFirstV2(&$s){
    $s = substr($s,1);
}

//First example: Without reference
$str = "abcde";
$str = everythingButFirst($str);
//Will set $str to bcde

//Second example: With reference
$str = "abcde";
everythingButFirstV2($str);
//Will set $str to bdce

Видите ли, это экономит немного времени на вводе с присваиванием.Гораздо проще вызвать функцию, чем вызвать функцию и присвоить ее переменной.

2 голосов
/ 08 июня 2011
  1. Оператор & присваивает значение по ссылке, что означает, что дальнейшее использование этой переменной будет ссылаться на оригинальное значение, а не на присвоенное. Ссылка (без каламбура): http://php.net/manual/en/language.references.php

  2. Комментарии имеют стиль phpdoc , они не генерируются сами по себе, но могут быть полезны при создании документов с помощью phpdoc или другого программного обеспечения, а также при получении ожидаемых параметров и возвращаемых значений в IDE.

  3. Подчеркивание обычно означает, что метод private. Когда используется в контроллере CI, это означает, что метод недоступен по URL. Related: Какое дело с лидирующим подчеркиванием в методах класса PHP?

  4. Вы в значительной степени правы. Функция get_instance() вернет свойство $instance Controller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...