ホームページ  >  記事  >  バックエンド開発  >  PHP を 5.4 にアップグレードした後、プライベート呼び出しクラス ライブラリを実行できなくなります。

PHP を 5.4 にアップグレードした後、プライベート呼び出しクラス ライブラリを実行できなくなります。

WBOY
WBOYオリジナル
2016-06-20 12:29:45878ブラウズ

小白さん、助けてください! ! !
php 5.4 にアップグレード後
以前は実行できていた関数が実行できなくなりました
全体のファイル構成は以下の通りです

class wechatCallbackapiTest
{
public function valid()
{
……
include('db.php');
……
$contentStr= $this->zhiwen($name,$xuehao);
……
}

プライベート関数 zhiwen($uid,$xuehao) {
include('db.php');
....
}
}

これで、zhiwen 関数は include('db.php'); に移動するだけで済み、以下は通常は実行されません
ただし、上記の db.php の有効な呼び出しは次のとおりです。通常

db.php ファイルはデータベース ライブラリを呼び出すクラスであり、ファイルは次のとおりです。
f75cb2c316a2cc5047ac5112987d05af

私は初心者なので、関数とクラス ライブラリの継承を理解していません。問題の解決を手伝ってください。


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

これは PHP の 5.4 へのアップグレードとは関係ありません。

パブリック関数 valid()
include('db.php');
そしてプライベート関数 zhiwen($uid,$xuehao)
include('db.php') ');
db.class.phpにdbクラスの定義があるため、dbクラスの重複定義でエラーが発生します
これはphp4でも禁止です!

これは、PHP を 5.4 にアップグレードすることとは関係ありません。

パブリック関数 valid()
include('db.php');
そしてプライベート関数 zhiwen($uid,$xuehao)
include('db.php ');
db.class.phpにdbクラスの定義があるため、dbクラスの重複定義でエラーが発生します
これはphp4でも禁止です!



ご回答ありがとうございます。
でもこうやって書けばアップグレード前は普通に実行できるんです
先ほどプライベート関数 zhiwen( の
include('db.php');
を削除しようとしました$uid,$xuehao) db.class.php に class db { .... } そうすれば、プログラムはどのバージョンの PHP でも動作します。正しく実行することは不可能です

ですが、
public function valid()

{

......
include( 'db.php'); //これは後で追加する可能性があります
……
$contentStr= $this->zhiwen($name,$xuehao);


逆に、
public function valid( )
{

......

include('db.php'); // これは可能です。後で追加してください

....
$contentStr= $this->zhiwen($ name,$xuehao)
....
}


include('db.php'); public function valid() には以前もありました
lnmp をアップグレードした後は使用できなくなりました
現在は public function valid()

とプライベート関数 zhiwen($uid,$xuehao)
はどちらもデータベース クラス
を呼び出す必要があります。では、どのようにして include( 通常? 'db.php');
クラス ライブラリを使用すればよいでしょうか。 ?




//引用多次造成的,改成如下include_once('db.php');

どれを include_once('db.php'); に変更する必要がありますか? >

//引用多次造成的,改成如下include_once('db.php');


どれを include_once('db.php'); に変更する必要がありますか?


両方変更してください

//引用多次造成的,改成如下include_once('db.php');




ご回答ありがとうございます。どちらを include_once('db に変更する必要があります。 .php');


両方を変更しました

//引用多次造成的,改成如下include_once('db.php');

同じファイルへの 2 回目の呼び出しは自動的にフィルターされるようにするために include_once をチェックしました
しかし、2 回目は、つまり、プライベート関数 zhiwen($uid,$ xuehao) この もそのクラス ライブラリを呼び出す必要があります
現在、呼び出されることも継承されることもありません
には、直接使用できないデータベース操作があります。継承する方法はありますか?
誰かこの問題の解決を手伝ってくれませんか

代わりに
public function valid()
{
……
include('db.php'); // これは後で追加する可能性があります
……
$contentStr= $this->zhiwen($name,$xuehao);
....
}



繰り返し呼び出せない場合は、プライベート関数 zhiwen( $uid,$xuehao) に質問してください。db クラス ライブラリをどのように使用すればよいですか? ありがとうございます

b.php の include('db.class.php'); を次のように変更します。 include_once('db.class.php');
include('db.php'); 変更する必要はありません



//引用多次造成的,改成如下include_once('db.php');
ご回答ありがとうございます。どちらを include_once('db.php') に変更するべきかお聞きしてもよろしいでしょうか。


両方変更してください

繰り返し呼び出せない場合は、プライベート関数 zhiwen($uid,$xuehao ) を聞いてください。 db クラス ライブラリをどのように使用すればよいですか。 ありがとうございます。


include('db.class.php') を変更してください。 ; b.php の
を include_once('db.class.php' ; db.php ファイルにあるものだけですか?


include_once はロードされますが、ロードされません
include は、ロードされているかどうかに関係なく、常にロードされます

したがって、複数回インクルードされたファイルには、クラス、関数、および定数、それ以外の場合は繰り返し定義を意味します

db.php には
include('db.class.php'); // db クラス
の定義が含まれているため、(' db.php'); の場合、db クラスがすでに定義されているためエラーが発生します。

include_once('db.class.php'); に変更すると、この問題は発生しません。


include_once は、
がロードされているかどうかに関係なく、一度ロードされるとロードされないことを意味します。 > したがって、定数の定義を複数回インクルードしたファイル内にクラスや関数を含めることはできません。そうしないと、繰り返し定義されることになります。

db.php には
include('db.class) が含まれています。 .php'); // db クラス
の定義が含まれているため、再度 include('db.php') を実行すると、db クラスがすでに定義されているためエラーが発生します

include_once('db.class.php'); に変更すると、db Tire の定義が 1 回だけロードされるため、この問題はなくなります



ご説明ありがとうございます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。