谁在PHP中定义了Mysqli类及其方法/属性

时间:2015-10-18 08:46:22

标签: php oop mysqli

我在OOP中非常新,并试图澄清一些事情。

  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,我开始使用新的实例定义。类定义部分在哪里?我发现这个link并且有许多属性和方法,但我找不到属性(我相信它们是属性)$ servername,$ username等。谁定义了它们,谁定义了我必须的顺序在新的mysqli中键入它们?

     $conn = new mysqli($servername, $username, $password, $dbname);
    
  3. 总结:如果我理解正确,Mysqli就像预定义的类,它存储在PHP的某个地方,但我仍然缺少$ servername,$ username等属性。

3 个答案:

答案 0 :(得分:2)

PHP带来了大量所谓的“扩展”。 PHP引擎的一种插件,提供类,常量和函数的定义和实现。这些扩展(通常)是用C语言编写的,必须进行编译,因此您无法轻松修改它们。扩展通常与PHP发行版捆绑在一起,许多扩展都在标准安装中激活。

对于mysqli课程,确实有一个mysqli分机。必须将此类扩展加载到PHP引擎中,然后才能使用扩展提供的功能。 PHP配置文件控制在启动PHP引擎时加载哪些扩展。

存在另外两个概念,为了完整起见,我将添加它们。尽管如此说mysqli是由扩展提供的。

某些软件包也是用PHP本身实现的,并且是这样分发的,例如“PEAR”类。这些可以安装在服务器上,您可以使用它们,但您必须通过require()调用或类似方式从包中包含一个中心文件。

然后有一个伟大的概念“自动加载”,它允许您设置您的东西,以便PHP可以在需要时自动包含PHP代码。这通常基于您用于类的严格命名方案来完成。然后解析类名,从该信息中识别要加载的文件。 PHP然后自动加载文件,并在后台及时加载。因此名称为“自动加载”。对于更大的项目非常方便。

最后有一个“自动前置”策略有时用于此目的:您可以配置PHP,使其始终在开始解释http请求请求的实际文件之前自动加载一个或多个文件。这可以在php配置或http主机配置中完成。派上用场,可以神奇地加载数据库凭据等内容。

但如前所述:mysqli是一个PHP扩展,通常与每个标准安装捆绑和激活。

答案 1 :(得分:1)

$ servername和$ username不是属性。该功能参数与您的Person::__construct()一样。

如果您以相同的随机顺序将变量发送到您的person类,您将获得相同的奇怪结果,例如

  

&#34;您好,我的名字是33 Joe。很高兴见到你! : - )&#34 ;;

它与mysqli,属性或OOP无关。这只是函数将按功能声明中预定义的顺序使用的函数参数。

答案 2 :(得分:0)

  • CREATE TABLE `database_mgr` ( `database_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `prim_cat` INT UNSIGNED NOT NULL, `database_name` VARCHAR(20), PRIMARY KEY (`databaseID`) )ENGINE = InnoDB; 类是mysqli PHP扩展的一部分。出于所有目的,您可以将其视为内置类。
  • mysqli附带PHP。它是捆绑式扩展。源代码位于此处:https://github.com/php/php-src/tree/master/ext/mysqli
  • 回答你的问题“谁定义了它们[属性],谁定义了我必须在新mysqli中输入它们的顺序?”。 mysqli PHP扩展为MySQL设计的API的作者,这是他/她决定应该如何: mysqli
  • 属性可以作为任何其他类的属性进行访问 - 例如$conn = new mysqli($servername, $username, $password, $dbname);http://php.net/manual/en/mysqli.affected-rows.php