ホームページ php教程 php手册 php全局变量和类配合使用深刻理解

php全局变量和类配合使用深刻理解

Jun 06, 2016 pm 08:30 PM
グローバル変数 親切

本文详细介绍下php全局变量和类在多种情况下的配合使用,感兴趣的朋友可以参考下哈,希望对大家有所帮助

情况1:
father.php如下定义:

复制代码 代码如下:


$jack = 1000;
?>
children.php 如下定义:
require("father.php");
$jack=123;
echo $jack."/n";
?>


php children.php
运行输出为123.
如果将$jack=123注释掉,运行为1000,如果将$jack=123放到require("father.php");之前,运行结果为1000.
比较好理解:php解释执行,解释到哪,执行到哪。。像$jack这种属于全局变量,如第一种情况的初始用它的时候是1000,香港虚拟主机,是在require
的时候运行得到的,结果又被改成了123,所以运行结果输出123.
情况2:
children.php代码改为如下:

复制代码 代码如下:


require("father.php");
function testJack(){
if(!isset($jack)){
echo '$jack is null'."/n";
}
}//testJack
testJack();
?>


php children.php
运行结果为:$jack is null.也就是说在testJack()中引用的$jack是一个局部变量。
如果使用global关键字,声明这个$jack是一个全局变量,代码改为如下:

复制代码 代码如下:


require("father.php");
function testJack(){
global $jack;
if(!isset($jack)){
echo '$jack is null'."/n";
}else{
echo '$jack is not null'."/n";
}
}//testJack
testJack();
?>


则运行结果为$jack is not null!
情况3:
children.php代码如下:

复制代码 代码如下:


require("father.php");
class JackTest{
public function testJack(){
if(!isset($jack)){
echo '$jack is null'."/n";
}else{
echo '$jack is not null'."/n";
}
}//testJack
}
$jackTest = new JackTest();
$jackTest->testJack();
?>


运行结果输出:$jack is null
这是因为class中的这个函数的$jack这是一个局部变量啊。
如果在function testJack开头加 global $jack;那么就输出$jack is not null了。
比较容易理解。
情况4:
把文件名当做参数动态加载,代码如下:

复制代码 代码如下:


$casefile = $_SERVER['argv'][1];
echo $casefile."/n";
require($casefile);
echo $jack."/n";
?>


运行php children.php father.php
结果如下:
father.php
1000
也就是说我们动态加载程序运行成功了。。
情况5:
要把动态加载和类的定义结合起来:
目录关系式这样的:
|- c.php
|- Bfold - b.php
|- Afold - a.class.php (里面的函数引用了../Bfold/b.php )
也就是说 在c.php 中new 了class a.class ,而a.class.php 的一个函数中require 了Bfold 文件夹下的b.php ,免备案空间,这个require(../Bfold/b.php )报错,虚拟主机,Warning: ……
因为你让服务器当前执行的是c.php 文件,所以php 解析的时候是把路径相对于c.php 而言的,你试试把(../Bfold/b.php )改成(Bfold/b.php )看看,应该就不会报错了。
下面是程序例子,说明在函数内部使用require_once (A.php ).
对require_once 的理解:
假设B.php 中引用了require_once(A.php); 这条语句。。
那么其实是相当于调用了A.php 这个匿名的lambda 函数去执行。如下图:
C.php 在一个函数调用中 require 了 B.php------》
B.php 在普通语句中 require 了 A.php--------》
A.php
现在我们调用 php B.php ;因为 B.php 在普通语句中使用了 require 调用了 A.php ,那么 A.php 会把它的相对 A 来说是全局变量的变量,注册到 B.php 的环境中。因为 B.php 是根开始调用文件,他的运行环境就是全局环境。所以A.php 文件中的变量在 B.php 可以被正常使用。

现在我们调用 php C.php ;那么 C 是在函数使用 require 调用了 B.php 的,然后 B 又调用了 A ,感觉在这个调用的过程中,相对 B 和 A 根运行环境是 C 的调用函数的环境 ,但 C 的调用函数如果要使用 B 和 A 中的变量,就没有办法了。

如果用 global $a, 去引用,那么由于 $a 在这种情况下不属于全局变量,引用不到。
如果用 $a 去引用,那么由于 $a 会被当成局部变量也引用不到的。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ 関数のローカル変数とグローバル変数の違いは何ですか? C++ 関数のローカル変数とグローバル変数の違いは何ですか? Apr 19, 2024 pm 03:42 PM

C++ ローカル変数とグローバル変数の違い: 可視性: ローカル変数は定義関数に限定されますが、グローバル変数はプログラム全体で参照できます。メモリ割り当て: ローカル変数はスタックに割り当てられ、グローバル変数はグローバル データ領域に割り当てられます。スコープ: ローカル変数は関数内にあり、グローバル変数はプログラム全体にあります。初期化: ローカル変数は関数の呼び出し時に初期化され、グローバル変数はプログラムの開始時に初期化されます。再作成: ローカル変数は関数呼び出しごとに再作成されますが、グローバル変数はプログラムの開始時にのみ作成されます。

PHPリクエストとはどういう意味ですか? PHPリクエストとはどういう意味ですか? Jul 07, 2021 pm 01:49 PM

request の中国語の意味は「要求」で、PHP のグローバル変数であり、「$_POST」、「$_GET」、「$_COOKIE」を含む配列です。 「$_REQUEST」変数は、POSTまたはGETで送信されたデータやCOOKIE情報を取得できます。

Go言語には静的グローバル変数はありますか? Go言語には静的グローバル変数はありますか? Jul 11, 2023 pm 03:37 PM

Go 言語には静的グローバル変数がありません。グローバル変数の必要性を処理するために、より柔軟な方法が使用されます。グローバル変数は通常、パッケージ レベルで宣言されます。つまり、関数の外で宣言される変数です。これらのグローバル変数はパッケージ全体に存在します. が表示され、パッケージ内の任意の関数で使用できます。

PHP エラー: クラスを繰り返し宣言できません。解決しました。 PHP エラー: クラスを繰り返し宣言できません。解決しました。 Aug 25, 2023 pm 04:13 PM

PHP エラー: クラスを繰り返し宣言できません。解決しました。開発者が問題に遭遇するのはよくあることです。 PHP 開発では、クラスを繰り返し宣言できないというよくあるエラーに遭遇することがよくあります。この問題は簡単そうに見えますが、時間内に解決しないとコードが正しく実行されません。この記事では、この問題の原因と解決策を紹介しますので、ご参考ください。 PHPコードでクラスを定義する際、同じファイルまたは複数のファイルに同じクラスを複数回定義するとクラスを繰り返し宣言できないエラーが発生します。これは

PHP の命名規則: クラス、メソッド、変数にキャメルケースの命名を使用する方法 PHP の命名規則: クラス、メソッド、変数にキャメルケースの命名を使用する方法 Jul 30, 2023 pm 02:43 PM

PHP の命名規則: キャメルケース表記を使用してクラス、メソッド、変数に名前を付ける方法 PHP プログラミングでは、適切な命名規則は重要なコーディング方法です。コードの可読性と保守性が向上し、チームワークがよりスムーズになります。この記事では、一般的な命名規則であるキャメルケースについて説明し、PHP でそれを使用してクラス、メソッド、変数に名前を付ける方法の例をいくつか示します。 1. キャメルケースの命名法とは何ですか?キャメルケースは、各単語の最初の文字を大文字にする一般的な命名規則です。

JavaScript でのグローバル変数の安全性の実装 JavaScript でのグローバル変数の安全性の実装 Jun 15, 2023 pm 10:33 PM

JavaScript の人気が高まるにつれて、JavaScript に依存する Web サイトやアプリケーションがますます増えています。ただし、JavaScript でグローバル変数を使用すると、セキュリティ上の問題が発生する可能性があります。この記事では、JavaScriptでグローバル変数の安全性を実装する方法を紹介します。グローバル変数の使用を避ける最善の方法は、グローバル変数の使用を避けることです。 JavaScript では、関数内で宣言されない限り、すべての変数はデフォルトでグローバルです。したがって、可能な限りローカル変数を使用する必要があります。

Java でクラスが見つかりません - java.lang.ClassNotFoundException を解決するにはどうすればよいですか? Java でクラスが見つかりません - java.lang.ClassNotFoundException を解決するにはどうすればよいですか? Jun 25, 2023 am 10:37 AM

Java 開発プロセス中に、java.lang.ClassNotFoundException というエラーが発生することがあります。必要なクラス ファイルが Java 仮想マシン (JVM) に見つからないと表示されます。このエラーによりプログラムが適切に実行されなくなり、時間内に解決しないと開発の進行が遅れます。この記事では、Javaに存在しないクラスの原因と解決策を紹介します。 1. 理由 1. クラスパスが間違っている Java では、パッケージパスとクラスパスが非常に重要です。クラスパスが正しく設定されていない場合、またはクラスファイルが正しく設定されていない場合

PHP のパッケージング技術とアプリケーション PHP のパッケージング技術とアプリケーション Oct 12, 2023 pm 01:43 PM

PHP のカプセル化テクノロジとアプリケーションのカプセル化は、オブジェクト指向プログラミングにおける重要な概念であり、外部プログラムに統一されたアクセス インターフェイスを提供するために、データとデータに対する操作を一緒にカプセル化することを指します。 PHP では、アクセス制御修飾子とクラス定義を通じてカプセル化を実現できます。この記事では、PHP のカプセル化テクノロジとそのアプリケーション シナリオを紹介し、いくつかの具体的なコード例を示します。 1. カプセル化されたアクセス制御修飾子 PHP では、カプセル化は主にアクセス制御修飾子によって実現されます。 PHP には 3 つのアクセス制御修飾子が用意されています。

See all articles