php言語の概要: 基本構文タイプ定数演算子フロー制御関数クラスとオブジェクト名前空間スーパーグローバル変数ガベージコレクションメカニズム
1 基本構文 *php タグ
echo "Hello world";
// ... 詳細コード
echo "最後のステートメント"
// スクリプトはここで終了します。PHP の終了はありません。 tag
注: ファイルの内容が純粋な PHP コードである場合は、ファイルの末尾にある PHP 終了タグを削除することをお勧めします。
これにより、PHP 終了タグの後にスペースや改行が誤って追加された場合に、PHP がこれらのスペースの出力を開始することを回避できます。
現時点ではスクリプト内でそれらを出力するつもりはありません。
*html
式が true の場合に表示されます
それ以外の場合は、これが表示されます。
2 つのタイプ
*はじめに
PHP は 8 つのプリミティブ データ型をサポートします。
4 つのスカラー型:
ブール型
整数
float (浮動小数点、double とも呼ばれます)
文字列
2 つの複合型:
配列
オブジェクト (オブジェクト)
最後に、2 つの特別な型があります:
リソース (リソース)
NULL (型なし)
注: 式の値と型を表示するには var_dump() 関数を使用し、型を取得するには gettype() を使用して特定の型であるかどうかを判断します is_type()
*boolean
ブール値を指定するには、キーワード TRUE または FALSE を使用します。どちらも大文字と小文字は区別されません
ブール値に変換すると、次の値は FALSE とみなされます:
ブール値 FALSE 自体
整数値 0 (ゼロ)
浮動小数点値 0.0 (ゼロ)
空の文字列、および文字列 "0"
要素のない配列
var_dump((bool) "") ((bool) -2); // bool(true)
var_dump((bool) "foo"); / bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump( (bool) array(12)) // bool(true)
var_dump((bool) array(); // bool(false)
var_dump((bool) "false"); // bool(true)
*integer
最大値は定数 PHP_INT_MAX で表すことができます
*float
*string
一重引用符: 内部の変数は解析されません
二重引用符: 内部の変数が解析されます
(変数がない場合は、一重引用符を使用することをお勧めします。内部の内容を解析する必要がないため、より効率的です)
複雑 (中括弧): 文字列の外側と同じように式を記述し、中括弧 { と } で囲むだけです
// 有効です。文字列内で複数の配列を使用する場合は、必ず次のようにしてください。括弧で囲みます
echo "これは動作します: {$arr['foo'][3]}";
// 有効な
echo "これは動作します: " . $arr['foo'][3] ?> ;
*array
// 単純な配列を作成します
$array = array (1, 2, 3, 4, 5); // 次に、すべての要素を削除します。ただし、配列自体は変更しないでください:
foreach ($array as $i => $value) {
unset($array[$i])
}
print_r($array); // 全体を削除します。 array unset($array)
?>
*object
新しいオブジェクト object を作成するには、 new ステートメントを使用してクラスをインスタンス化します:
class foo
{
function do_foo()
{
echo "Doing foo.";
$bar = new foo;
$bar- >do_foo ();
?>
*resource
データベース接続と同様に、リソースが返されます
*null
NULL 型は値は 1 つだけこれは、大文字と小文字を区別しない定数 NULL です。
次の場合、変数は NULL とみなされます。
に NULL の値が割り当てられている。
にはまだ値が割り当てられていません。
は unset() です。
null かどうかを判断するには、is_null() を使用します
2 変数
*基本
$this は特別な変数であり、割り当てることはできません
変数はデフォルトで常に値によって割り当てられ、参照変数もありますこれは変更を意味します 新しい変数は元の変数に影響します
* 事前定義された変数
* 変数スコープ
ユーザー定義関数では、ローカル関数スコープが導入されます。関数内で使用される変数は、デフォルトでローカル関数のスコープに制限されます
$a = 1; /* グローバル スコープ */
function Test() {
echo $a;スコープ変数 */ }
Test();C 言語とは少し異なります。C 言語では、ローカル変数によってオーバーライドされない限り、グローバル変数は関数内で自動的に有効になります。
PHP のグローバル変数は、関数内で使用する場合はグローバルとして宣言する必要があります
$a = 1;
$b = 2;
function Sum()
{
global $a, $b; = $a + $b;
Sum();
?>
状態変数はローカル関数のスコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません
function test()
{
static $a = 0;
$a++; }
?>
*変数 variable
$a = 'hello' ;
$$a = 'world';
echo "$a ${$a}";
echo "$a $hello";
*変数外部から php
$_POST $_GET
3 Constants
// 有効な定数名
define("FOO", "something")
define("FOO2", "something else");
define("FOO_BAR", "something more");
// 不正な定数名
define("2FOO", "something")
// 次の定義は正しいですが、これは避けてください: (カスタム定数は__ で始まらない)
// おそらく PHP は __FOO__ マジック定数を定義するでしょう // これはあなたのコードと競合します
define("__FOO__", "something")
?>
4 Operator
; *優先度
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? ) ? 1 : 2 = 2
$b = 2; // $ a = ($b += 3) -> $ b = 5
// ++ と + を混合すると未定義の動作が発生します
$a = 1;
echo ++$a + $a++; // 4 または 5 を出力する可能性があります
*エラー演算子 はエラー制御をサポートします演算子: @、この式によって生成される可能性のあるエラー メッセージは無視されます。
*実行演算子
これは一重引用符ではないことに注意してください。 PHP は、バッククォートで囲まれたコンテンツをシェル コマンドとして実行しようとし、その出力を返します
バッククォート演算子「`」を使用すると、関数 shell_exec() と同じ効果があります。
$output = `ls -al`;
echo "
$output
";
?>
*文字列連結演算子
そこには 2 つの文字列演算子です。 1 つ目は連結演算子 (「.」) で、左引数と右引数を連結した文字列を返します。 2 つ目は連結代入演算子 (".=") で、右のパラメーターを左のパラメーターに追加します
$a = "Hello ";
$b = $a ; // $b には "Hello World!" が含まれています $a = "Hello "; $a .= "World!"; // 現在、$a には "Hello World!" が含まれています
$ a + $b Union $a と $b の和集合。
$a と $b が同じキー/値ペアを持つ場合、$a == $b は TRUE に等しくなります。
$a === $b congruent $a と $b が同じキー/値ペアを持ち、同じ順序と型である場合に TRUE。
$a != $b は、$a が $b と等しくない場合、TRUE となります。
$a <> $a が $b と等しくない場合、$b は TRUE となります。
$a !== $b は等しくない $a が $b と等しくない場合は TRUE。
+ 演算子は、右側の配列要素を左側の配列に追加します。キー名が両方の配列にある場合は、左側の配列の要素のみが使用され、右側の配列は無視されます。
$a = array("a" => "リンゴ", "b" => "バナナ");
$b = array("a" => "ナシ", "b " => "イチゴ", "c" => "チェリー");
$c = $a + $b; // $a と $b の結合
echo "$a と $b の結合: n";
var_dump($c);
$c = $b + $a; // $b と $a の結合
echo "$b と $a の結合: n";
var_dump($c) ;
?>
配列内のセルのキー名と値が同じである場合、比較すると同じになります
$a = array("apple", "banana"); = array(1 = > "バナナ", "0" => "リンゴ");
var_dump($a == $b) // bool(true)
var_dump($a === $b) ); // bool (false)
?> *型演算子
instanceofは、PHP変数が特定のクラスのインスタンスに属しているかどうかを判断するために使用されます
クラス MyClass
{
}
クラス NotMyClass
{
}
$a = 新しい MyClass;
var_dump($a instanceof NotMyClass);
5:フロー制御
*if else
*フロー制御の代替構文 PHP は、if、while、for、foreach、switch など、フロー制御の代替構文をいくつか提供しています。
代替構文の基本形式は、左中括弧 ({) をコロン (:) に置き換え、右中括弧 (}) をそれぞれ
endif;、endwhile;、endfor;、endforeach; に置き換えます。 。
A は 5 に等しい
while (expr):
ステートメント
...
endwhile;
* for
$people = Array(
Array('name' => Pierre', 'salt' => 215863)
);サイズ = sizeof($people; ++$i)
$people[$i]['salt'] =
; *foreach
$value の前に & を追加することで、配列の要素を簡単に変更できます。
このメソッドは、値をコピーするのではなく、参照によって値を割り当てます。
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2
}
// $arr は配列になります(2, 4, 6, 8)
unset($value); // 最後に参照をキャンセルします
?> *require と include
require でエラーが発生するとスクリプト プログラムが停止し、include は警告を生成します
require_onceと require は基本的に同じですが、唯一の違いは、PHP がファイルが既にインクルードされているかどうかをチェックし、インクルードされている場合は再度インクルードされないことです。
6 つの関数
*変数関数
可変個引数関数は可変個引数変数に似ています
これは、変数名の後に括弧がある場合、PHP は変数の値と同じ名前の関数を探し、次のことを試みることを意味します。それを実行してください。
変数関数は、コールバック関数や関数テーブルなどのいくつかの目的を実装するために使用できます
function foo() {
echo "In foo()
n"
}
function bar( $arg = '') {
echo "bar(); 引数は '$arg' でした。
n"
} // エコーラッパー関数を使用します
function echoit($ string)
{
echo $string
}
$func = 'foo';
$func(); // これは foo() を呼び出します
$func = 'bar'; // これcall bar()
$func = 'echoit';
$func('test'); // これは echoit() を呼び出します
?>
*匿名関数
echo preg_replace_callback( '~-( [a-z])~', function ($match) {
return strtoupper($match[1]); }, 'hello-world');
// helloWorld
7 つのカテゴリとオブジェクト
*基本概念
$this は、呼び出し元のオブジェクト (通常はメソッドが属するオブジェクト) への参照です
*属性
クラスのメンバー メソッドでは、 ->(object Operator ): $this を使用できます。 ->property (property はプロパティの名前) を使用して、非静的プロパティにアクセスします。
静的プロパティには、:: (二重コロン): self::$property を使用してアクセスします。より多くの静的属性と非静的
*クラス定数
クラス内で常に変更されない値を定数として定義できます
class MyClass
{
const constant = '定数値' }
? > ;
*クラスの自動ロード
*static static キーワード
クラスの属性またはメソッドを static として宣言すると、クラスをインスタンス化せずに直接アクセスできます。インスタンス化されたクラスのオブジェクトを通じて静的プロパティにアクセスすることはできません (ただし、静的メソッドはアクセスできます)
静的メソッドはコンパイル前にロードされるため、非静的メソッドはまだ存在しないためアクセスできません
*抽象クラス Any Aクラス内で少なくとも 1 つのメソッドが抽象として宣言されている場合、このクラスも抽象として宣言する必要があります
*Interface
インターフェイス (インターフェイス) を使用すると、特定のクラスがどのメソッドを実装する必要があるかを指定できますが、必須ではありません。これらの方法の詳細。
*traits
トレイトはクラスに似ていますが、きめ細かく一貫した方法で機能を組み合わせるように単純に設計されています。
トレイトを単独でインスタンス化することはできません。従来の継承に水平機能の組み合わせが追加されます
つまり、アプリケーション クラスのメンバーを継承する必要はありません。
特性 ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo; /* ... */
}
?>
*オブジェクトのトラバース
*final キーワード
親クラスのメソッドがfinalと宣言されている場合、サブクラスはこれをオーバーライドできません方法。クラスがfinal宣言されている場合、そのクラスを継承することはできません。
*オブジェクトのコピー
*オブジェクトの比較
比較演算子 (==) を使用して 2 つのオブジェクト変数を比較する場合、比較の原則は次のとおりです: 2 つのオブジェクトの属性と属性値が等しい場合、
と 2 つのオブジェクトがクラスの同じインスタンスである場合、2 つのオブジェクト変数は等しいです。
等価演算子 (===) を使用する場合、これら 2 つのオブジェクト変数は特定のクラスの同じインスタンス (つまり、同じオブジェクト) を指している必要があります。
*Late Static Binding
*オブジェクトと参照
重要なポイントは、「オブジェクトはデフォルトで参照渡しされる」ということです。しかし実際には、これは完全に正しいわけではありません。以下にいくつかの例を示します。
*オブジェクトのシリアル化
PHPのすべての値は、関数serialize()を使用してバイトストリームを含む文字列を返すことで表現できます。 unserialize() 関数は、文字列を PHP の元の値に戻すことができます。
オブジェクトをシリアル化すると、オブジェクトのすべての変数が保存されますが、オブジェクトのメソッドは保存されず、クラスの名前のみが保存されます
8 つの名前空間
*名前空間の概要 ユーザー作成のコードと PHP内部クラス/関数/定数間、またはサードパーティのクラス/関数/定数間の名前の競合。
namespace myname; // 「名前空間の定義」セクションを参照
class MyClass {}
function myfunction() {}
const
$a = new MyClass; new mynameMyClass; // 「グローバル空間」のセクションを参照してください
$a = strlen('hi'); // 「名前空間の使用: グローバル関数/定数のバックアップ」のセクションを参照してください
$d = namespaceMYCONST; 「名前空間の操作」の「文字と __NAMESPACE__ 定数」のセクションを参照してください
$d = 'MYCONST'; // 「名前空間と動的言語の機能」のセクションを参照してください
;
*namespace キーワードと __NAMESPACE__ 定数
namespace MyProject;
echo '"', __NAMESPACE__, '"'; // 出力 "MyProject"
*名前空間が定義されていない場合、 all クラスと関数の定義はすべてグローバル空間にあります。これは、PHP が名前空間の概念を導入する前と同じです。名前の前に
を付けると、名前が別の名前空間にある場合でも、その名前がグローバル空間にあることを示します。
namespace ABC;
/* この関数は ABCfopen */
function fopen() {
/* ... */
$f = fopen(...); // グローバル fopen 関数を呼び出します。
return $f;
}
?>
9 つのスーパーグローバル変数
$GLOBALS
$_GET
$_POST
$_FILES
$_COOKIE
$_セッション
$_REQUEST
$_ENV
10 個のガベージ コレクション メカニズム
* 参照カウンタ、各 PHP 変数は「zval」と呼ばれる変数コンテナに保存されます。変数の型と値に加えて、
2 バイトの追加情報も含まれます。最初の情報は「 is_ref" は、参照セットに属しているかどうかを識別するために使用されるブール値です
2 番目の追加バイトは、参照の数をカウントするための refcount です
$a = "new string";
xdebug_debug_zval('a') ;
?>
結果: a: (refcount=1, is_ref=0)='新しい文字列'
* 参照カウントが増加すると、変数コンテナは使用され続けます。ゼロ (無料)