関数を呼び出すときにデータベース接続ファイルを関数本体に配置する必要があるのはなぜですか?

WBOY
リリース: 2016-06-23 14:15:18
オリジナル
958 人が閲覧しました

次のようなプログラム:

<? header("Content-type: text/html; charset=gb2312");   $act=$_GET["act"];if($act=="del")	{		 	//删除记录	$id =$_GET["id"];	require('conn.php');	$conn->query("delete from lyb where id=$id");	fy();	}if($act=="list") { fy();}function fy() {require('conn.php'); $sql="select * from lyb order by ID desc";	//echo $sql;$result=$conn->query($sql);}
ログイン後にコピー


require('conn.php'); を関数の外に書いた場合、以下のように動作しません。このように、if文が複数ある場合には、require('conn.php');を何度も書かなければならず、非常に不便です。パラメータも戻り値も持たない関数は、実際には関数本体のコードを関数が呼び出される位置に挿入するのと同じだと記憶していますが、ここからはそうではありません。

<? header("Content-type: text/html; charset=gb2312"); require('conn.php');  $act=$_GET["act"];if($act=="del")	{		 	//删除记录	$id =$_GET["id"];	$conn->query("delete from lyb where id=$id");	fy();	}if($act=="list") { fy();}function fy() { $sql="select * from lyb order by ID desc";	//echo $sql;$result=$conn->query($sql);}
ログイン後にコピー


ディスカッションへの返信 (解決策)

外部で書かれた $con はグローバル変数です。もちろん関数本体内では利用できません。これを次のように変更します
function fy() {
global $conn;
$sql="select * from lyb order by ID desc";
//echo $sql;

$result=$conn->query($) sql );}

が含まれているため、繰り返し含まれることが心配な場合は、 require_once('conn.php'); を使用することで回避できます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート