Кто определяет класс Mysqli и его методы / свойства в PHP

1

Я очень новичок в ООП и пытаюсь прояснить некоторые вещи.

  1. Это простой класс с некоторыми свойствами и в конце кода я вызываю новый экземпляр $ me из класса. Я понимаю это.

      <?php
    // The code below creates the class
    class Person {
        // Creating some properties (variables tied to an object)
        public $isAlive = true;
        public $firstname;
        public $lastname;
        public $age;
    
        // Assigning the values
        public function __construct($firstname, $lastname, $age) {
          $this->firstname = $firstname;
          $this->lastname = $lastname;
          $this->age = $age;
        }
    
        // Creating a method (function tied to an object)
        public function greet() {
          return "Hello, my name is " . $this->firstname . " " . $this->lastname . ". Nice to meet you! :-)";
        }
      }
    
    // Creating a new person called "boring 12345", who is 12345 years old ;-)
    $me = new Person('boring', '12345', 12345);
    
    // Printing out, what the greet method returns
    echo $me->greet(); 
    ?>
    
  2. По Mysqli я начинаю правильно с определения нового экземпляра. Где часть определения класса? Я нашел эту ссылку, и есть много свойств и методов, но я не могу найти свойства (я считаю, что они являются свойствами) $ servername, $ username и т.д. Кто их определяет и кто определяет их порядок, в котором я должен вводить их в новый mysqli?

     $conn = new mysqli($servername, $username, $password, $dbname);
    

Резюме: если я правильно понимаю, Mysqli - это что-то вроде предопределенного класса, который хранится где-то в PHP, но я все еще пропускаю свойства как $ servername, $ username и т.д.

  • 0
    Классы в PHP могут быть определены вами или PHP / расширениями. MySQLi использует последнее, и, таким образом, в PHP нет класса, который напрямую вызывает скомпилированную процедуру.
  • 1
    Открытые свойства для класса MySQLi перечислены в указанной вами ссылке. Однако обратите внимание, что класс не обязан делать параметры в конструкторе доступными в качестве открытых свойств - это зависит от автора. Таким образом, автор в этом случае, возможно , создал способ прочитать имя сервера из экземпляра MySQLi, но в равной степени он мог не делать этого. Возможно, это личное и, следовательно, недоступно для вас.
Теги:
oop
mysqli

3 ответа

1
Лучший ответ

$ servername и $ username не являются свойствами. Параметры этой функции, как и в вашем Person::__construct().

Если вы отправляете переменные в свой класс человека в том же случайном порядке, вы также получите такие же странные результаты, как

"Привет, меня зовут 33 Джо. Приятно познакомиться! :-)";

Это не имеет ничего общего с mysqli, свойствами или ООП в целом. Это просто функциональные параметры, которые функция будет использовать для того, что было предопределено в объявлении функции.

  • 0
    отличное объяснение. Благодарю.
2

PHP поставляется с множеством так называемых "расширений". Вид плагинов для механизма PHP, которые предоставляют такие определения и реализации классов, констант и функций. Такие расширения (обычно) написаны на языке C и должны быть скомпилированы, поэтому вы не можете их легко изменить. Расширения часто связаны с распределением PHP, многие из них активируются в стандартных установках.

Для класса mysqli действительно существует расширение mysqli. Такое расширение должно быть загружено в ваш PHP-движок, только тогда вы можете использовать функции, предоставляемые расширением. Файлы конфигурации PHP управляют, какие расширения загружаются при запуске PHP-движка.

Существуют две другие концепции, я добавлю их для полноты. Хотя, как сказано, mysqli предоставляется расширением.

Некоторые пакеты также реализованы в самом PHP и распространяются как таковые, например, классы "PEAR". Они могут быть установлены на сервере, и вы можете их использовать, но вы должны включить один центральный файл из пакета с помощью вызова require() или подобного.

Тогда есть отличная концепция "автоматической загрузки", которая позволяет вам настраивать свои материалы таким образом, чтобы PHP мог автоматически включать код PHP, когда это необходимо. Обычно это делается на основе строгой схемы именования, которую вы используете для своих классов. Затем имя класса анализируется, из этой информации идентифицируется файл для загрузки. Затем PHP загружает файл автоматически и точно в фоновом режиме. таким образом, имя "автонагрузка". Очень удобно для больших проектов.

Наконец, существует одна стратегия автоматического добавления, используемая иногда для таких целей: вы можете настроить PHP таким образом, чтобы он всегда автоматически загружал один или несколько файлов до начала интерпретации фактического файла, запрошенного HTTP-запросом. Это можно сделать в конфигурации php или конфигурации хоста http. Пригодится для волшебной загрузки таких вещей, как учетные данные базы данных.

Но, как сказано выше: mysqli является расширением PHP и обычно поставляется в комплекте и активируется при каждой стандартной установке.

0
  • mysqli class является частью расширения mysqli PHP. Для всех ваших целей вы можете думать об этом как о встроенном классе.
  • mysqli поставляется с PHP. Это связанное расширение. Исходные коды находятся здесь: https://github.com/php/php-src/tree/master/ext/mysqli
  • Чтобы ответить на ваш вопрос "Кто определяет их [свойства] и кто определяет их порядок, в котором я должен вводить их в новый mysqli?". Автор mysqli PHP extension разработан API для MySQL, и именно так он и решил: $conn = new mysqli($servername, $username, $password, $dbname);
  • Доступ к свойствам можно получить как свойство любого другого класса - например, $mysqli->affected_rows; (http://php.net/manual/en/mysqli.affected-rows.php)
  • 0
    А как насчет $ servername, $ username, $ password, $ dbname. Это тоже свойства? Я не могу найти их в руководстве. Кто определяет, что я должен напечатать их в новом экземпляре в этом порядке?
  • 0
    $servername , $username , $password и $dbname - это строки, которые вы должны указать самостоятельно. Список свойств находится здесь: php.net/manual/en/class.mysqli.php/* Properties */ ), и вы можете видеть, что нет password свойства. Так что нет ничего похожего на $mysqli->password .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню