我应该将$ mysqli变量传递给每个函数吗?

wir*_*ark 8 php mysql database mysqli function

我有一个小问题从mysql_*传递到mysqli面向对象.

我的index.php文件的结构类似于包含两个文件:

include('connect.php');
include('function.php');
Run Code Online (Sandbox Code Playgroud)

connect.php文件包含:

<?php
$mysqli = new mysqli("localhost", "root", "test", "test");

if (mysqli_connect_errno($mysqli)) {
    printf("Connection failed: %s\n", mysqli_connect_error());
    exit();
}
?>
Run Code Online (Sandbox Code Playgroud)

function.php文件中有一个名为showPage的函数,该函数不带参数但使用$ mysqli连接,在......之类的行中

$result = $mysqli -> query("SELECT * FROM $table ORDER BY ID DESC"); // Seleziono tutto il contenuto della tabella
Run Code Online (Sandbox Code Playgroud)

如果不传递$ mysqli变量的函数,我无法管理它,但是当我使用mysql_*不推荐的函数时,这不是必需的!

我能理解为什么,解决这个问题的最佳方法是什么?

qui*_*int 8

用户定义的函数在PHP中有自己的变量范围.您需要$mysqli将函数作为参数传递给函数,或者启动函数global $mysqli.

这个确切的问题在Variable scope页面上作为示例给出:

但是,在用户定义的函数中,引入了本地函数范围.函数内使用的任何变量默认限制为本地函数范围.例如,此脚本不会生成任何输出,因为echo语句引用$ a变量的本地版本,并且尚未在此范围内分配值.您可能会注意到这与C语言略有不同,因为C中的全局变量可自动用于函数,除非被本地定义特别覆盖.这可能会导致一些问题,因为人们可能会无意中更改全局变量.在PHP中,如果要在该函数中使用全局变量,则必须在函数内将其声明为全局变量.

<?php
$a = 1; /* global scope */ 

function test()
{ 
    echo $a; /* reference to local scope variable */ 
} 

test();
?>
Run Code Online (Sandbox Code Playgroud)