これらの PHP の概念の中には、最初は理解するのが難しいものもあります。一部の人を助け、今後の困難を軽減することを願って、すべてをリストします。
1. 変数変数 (変数の変数)
variable_variables.php
echo $$a.'
';
$b = 'ジョン';
$c = 'メアリー';
$e = 'ジョー';
$students = array('b','c','e');
echo ${$students[1]};
/*
foreach($students as $seat){
echo $$seat.'
';
}
$$var[1]
#1 の ${$var[1]}
*/
$a = 'こんにちは';
変数 $a に hello を代入すると、$$a = ${hello} = $hello = 'こんにちは';
$$students[1] の場合、これにより混乱が生じ、PHP インタプリタが理解できない可能性があります。'[' には上位演算子がありますが、結果が出力されない可能性があります。
適切な書き方は次のとおりです: ${$students[1]} = 'Mary';
2. 配列の関数
array_functions.php
shift & unshift >';
$numbers = array(1,2,3,4,5,6);
print_r($numbers);
echo '
';ぱ>
// 最初の要素を配列からシフトします
// インデックスはリセットされます
$a = array_shift($numbers);
echo 'a: '.$a.'
';
print_r($numbers);
// 要素を配列の先頭にプッシュします
// 配列の数を返し、配列のインデックスをリセットします
$b = array_unshift($numbers, 'first');
echo '
b : '.$b.'
';
print_r($numbers);
echo '
pop & Push
';// 要素を配列の最後にプッシュします
$d = array_push($numbers, 'last');
echo 'd: '.$d.'
';
print_r($numbers);
3. 日付と時刻 (時刻と日付)
UNIX 時間 (1970/1/1 から現在までの秒数) を作成するには 3 つの方法があります。
time(); 現在のタイムスタンプを返します
mktime($hr, $min, $sec, $month, $day, $year); mktime(6,30,0,5, 22) ,2012) 2012 5/22 6:30:00 のタイムスタンプを返します
strtotime($string); strtotime(" 1 day") 明日のこの時刻のタイムスタンプを返します さらに '最後の月曜日' ' Lasy Year '
checkdate($month, $day, $year); 日付が true かどうかを確認します checkdate(5,32,2012) ? 'true' : 'false'; // false を返します
タイムスタンプを取得した後、2012/5/22 などの読み取り可能な形式に変換する必要があります。
2 つのメソッドがあります date($format, $timestamp); strftime($ format [,$ timestamp])
2 番目のタイプ strftime("%Y-%m-%d %H:%M:%S"); // return 2012-05-22 15 を使用することをお勧めします。 46:40
5. サーバー変数 (サーバーおよび実行環境の情報)
$_SERVER
server_variables.php
6.variable_scope (グローバル静的変数のスコープ)
static_variables.php
test();
echo '
';
test();
echo '
';
test();
echo '
' ;
echo '
test1();
エコー '
';
test1();
エコー '
';
test1();
エコー '
' ;
test() 関数の変数 $a は $a の結果を保存せず、test() を繰り返し呼び出しても $a の値は増加しません
test1() 関数の変数 $a は、静的変数である staic $a = 0 を宣言します。
引用: 静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても値は失われません。
静的変数はローカル関数スコープ、つまり test1() 関数本体にのみ存在できます。ただし、プログラムが test1() スコープを離れても、静的変数はその値を失いません。 $a 変数は 1 ずつ増加します。test1() が再度呼び出されると、$a = 1;
global_variables.php
関数 Sum()
{
グローバル $a, $b;
$b = $a $b;
}
Sum();
echo $b;
echo '
関数 Sum1()
{
$GLOBALS['b'] = $GLOBALS['a'] $GLOBALS['b'];
}
Sum1();
echo $b;
引用: PHP では、グローバル変数を関数内で使用する場合は、関数内でグローバル変数を宣言する必要があります。
これらの変数を関数内で使用する場合は、その関数内でグローバル変数を定義する必要があります。これにより、多くのトラブルを回避できます。
詳細A> 1.致命的なエラー: オブジェクト コンテキスト内にないときに $this を使用する 初めて OOP を学習する場合、よく理解していない概念があるため、この間違いは間違いなく起こりやすいです。クラスのアクセシビリティも範囲であると言えます。海外にいる中国人についても考えることができます。彼はどの文化にも属しておらず、外国語を話せません(おそらく少しは知っています)が、彼は話すことができません外国人は同じ国に生まれたわけではないので、コミュニケーションをとる必要があります。 この間違いは非常に古典的であり、非常に実用的です。まず静的な定義を見てみましょう。 クラスのプロパティまたはメソッドを static として宣言すると、クラスのインスタンス化を必要とせずにアクセスできるようになります。static として宣言されたプロパティには、インスタンス化されたクラス オブジェクトではアクセスできません (ただし、static メソッドではアクセスできます)。 翻訳: クラスのプロパティまたはメソッドを静的として定義すると、クラスを初期化せずに直接アクセスできるようになります。静的として定義されたプロパティには、オブジェクト演算子 * -> * を使用してクラスのオブジェクトからアクセスすることはできません (静的メソッドを通じてアクセスできます)。 説明例: 同様に、静的演算子 :: を使用してパブリック変数にアクセスすることはできません。正しいアクセスは 14 行目と 25 行目です。1 つはクラスの定義 (self:: === Trones::) 内でアクセスされ、もう 1 つはクラス外でアクセスされます。 継承されたクラスにも、上記のルールが適用されます。 2.致命的なエラー: プライベート メソッドの呼び出し 次のストーリーにもタイトルがあります: Class Visibility (可視性) 最終的な答えがわかっている場合は、説明部分をスキップできます。 当静的碰到非公開,结合生复杂,也生美;就像抽象的人,像我们大学老师讲的数学课;(不过网易的公开数学课很好) 目的の女性が最後の報酬を取得した場合は、13 回の $this->getFire() を実行するだけでこの部分を削除できます。同様の方法で、静的関数内でオブジェクト オペレーションを使用することはできません。符。 怎么使用人民获得王冠呢?你去奋斗吧! 大規模なフレームワークやウェブサイトを構築しない場合、これらの概念はインターフェイスの抽象的な実装と同様に役立ちます。
7 .reference(reference)
variable_reference.php
$a = 'arist';
$b = $a;
$b = 'ming';
echo "私の名前は: {$a}。しかし、母は私を {$b} と呼んでいます。
";
echo '
';
$a = 'arist';
$ b = &$a;
$b = 'ming';
echo "私の名前は:{$a}。母は私を {$b} と呼んでいます。
";
この概念はこう理解すると、母は私のことをミンミンと呼んでいますが、上司は私のことをシャオヤンと呼んでいます、ミンミンでもシャオヤンでも、それは私です。
'&' そして、これが、さまざまな人々が私たちのエイリアス、つまり参照を呼び出す方法です。これは、$a = {me、またはメモリ内の値}、$b = {leader、mother、または variable} と同等です。
& を通じて、$b はメモリ内の $a の唯一の同じ値を指します。したがって、上司があなたを何と呼んでも、母親があなたを何と呼んでも、あなたはあなたです。名前が違うだけです。
したがって、参照を渡した後、$b の値を変更し、$a の値も変更します。
8. 参照変数を関数に渡す (参照パラメータを関数に渡す)
function ref_test(&$var){
return $var *= 2;
}
$a = 10;
ref_test($a);
echo $a;
パラメータを参照によって関数に渡す場合、これは変数のコピーではなく、実際の値を渡します。
したがって、関数 ref_test($a) を呼び出すと、$a の値が変更されているため、最終的に $a = 20;
9. 参照関数の戻り値 (参照関数の戻り値)
reference_function_return_value.php
function &increment(){
static $var = 0;
$var;
return $var;
}
$a =& increment(); // 1
increment(); // 2
$a; //3
increment(); // 4
エコー "a: {$a}";
最初に参照関数を宣言し、関数本体で、増加した値を保存できる静的変数 $var を宣言します。
$a =& increment(); このステートメントは変数 $a 参照関数 increment() の戻り値
先ほどの参照変数と同様に、increment() 関数を変数とみなすことができ、$a = & $b; となります。
>
つまり、increment() と $a は両方とも同じ値を指しているため、どちらかを変更すると同じ値を変更できます。
詳細A>
オブジェクト OOP
では、エラーはどのようにして起こったのでしょうか?以下の例を見てください。
class Trones {
static public $fire = "私は火です。";
public $water = "私は水です";
static function getFire( ) {
return $this->fire; // 間違った
}
static function getWater() {
return $self::water; // 間違った
}
static function Fire() {
return self ::$ fire ; // 関数を呼び出す前に必ず self を使用して静的プロパティにアクセスしてください
}
}
/*
致命的なエラー: $this を使用していないときに $this を使用しますオブジェクト コンテキスト */
//echo Trones::getFire( ) ;
//echo Trones::getWater( ) ;
// 正しい
echo Trones::Fire ( );
echo "
" ;
$trones = new Trones ;
$trones->fire ; // 注意: 未定義のプロパティ: Trones::$fire (異なるエラー設定に基づく) simpleエラーです echo Trones::$fire ;
行 7 と行 10 も同じ間違いを犯しました。最初の間違いは、オブジェクト演算子を使用して静的変数にアクセスすることでした。定義を見ると、$this はオブジェクト、つまりインスタンスに相当する疑似変数です。オブジェクト演算子 -> を使用してアクセスすると、エラーが報告されます。
最近、ゲーム オブ スローンズと呼ばれる非常に興味深いテレビ シリーズがあります。7 人の王、庶民、そしてドラゴンの女性の 3 つのパーティがいると仮定します。 3人は以下で争い、最終優勝が栄冠となった。
class Trones {
protected $fire = " fire ";
public $water = " Water " ;
static private $trones = "Trones";
protected function getFire( ) {
$this->fire ;
}
static public function TheDragenOfMather( ) {
return __METHOD__." use ".$this->getFire()." は ".self::getTrones( ) ;
}
static public function getWater( ) {
return __METHOD__ ;
}
static private function getTrones( ) {
return self::$trones ;
}
}
class Kings extends Trones {
static function TheSevenKing( ) {
return __METHOD__."gets the ".self::getTrones( );
}
}
class People extends Trones{
static function ThePeople( ) {
return __METHOD__."gets the ".self::getTrones( );
}
}
echo Kings::TheSevenKing( ) ;
echo Trones::TheDragenOfMather( ) ;
echo People::ThePeople( ) ;
正确答案是:7国征战内斗、平民死伤無数、龙女想乘机渔翁得利;可哀想最终谁也皇冠も胤利も得られなかった。