ホームページ >バックエンド開発 >PHPチュートリアル >PHP に関する実用的だが見落とされやすい知識を要約する (推奨)

PHP に関する実用的だが見落とされやすい知識を要約する (推奨)

怪我咯
怪我咯オリジナル
2017-06-16 11:04:051664ブラウズ

この記事では、PHP関数が関数の存在を判定するのか、PHP関数の変数関数など、日常業務で見つけながらも無視されがちな、PHPで必要となる豆知識を中心にまとめています。皆さん、編集者をフォローして詳細な紹介を見てみましょう。

この記事は主に PHP の役立つ知識をまとめ、参考と学習のために共有します。詳細な紹介を見てみましょう:

1. 関数が存在するかどうかを判断するための PHP 関数

学習後。カスタム関数と変数関数の使用法を理解する場合、プログラムによって呼び出される関数が存在することを確認するために、関数が存在するかどうかを判断するために function_exists がよく使用されます。同じmethod_existsを使用して、クラスメソッドが存在するかどうかを検出できます。

function func() {
}
if (function_exists('func')){
 echo 'exists';
}

クラスが定義されているかどうかに関係なく、class_existsを使用できます

class MyClass{
}
// 使用前检查类是否存在
if (class_exists('MyClass')) {
 $myclass = new MyClass();
}

PHPには、ファイルが存在するかどうかfile_existsなど、このようなチェックメソッドがたくさんあります。

2. 変数関数のPHP関数

いわゆる変数関数とは、変数の値を介して関数を呼び出すことを意味します。変数の値は変数であるため、値を変更することでさまざまな関数を呼び出すことができます。変数。これは、コールバック関数、関数リストで、または動的パラメーターに基づいてさまざまな関数を呼び出すためによく使用されます。変数関数を呼び出す方法は、変数名に括弧を追加することです。

$filename = 'test.txt';
if (!file_exists($filename)) {
 echo $filename . ' not exists.';
}

変数関数を使用してオブジェクトのメソッドを呼び出すこともできます

function name() {
 echo 'jobs';
}
$func = 'name';
$func(); //调用可变函数

静的メソッドは変数を介して動的に呼び出すこともできます

class book {
 function getName() {
  return 'bookname';
 }
}
$func = 'getName';
$book = new book();
$book->$func();

静的メソッドでは、$this疑似変数は禁じられている。 self、parent、static を使用して、静的メソッドとプロパティを内部的に呼び出すことができます。

$func = 'getSpeed';
$className = 'Car';
echo $className::$func(); //动态调用静态方法

3. PHP クラスとオブジェクトの高度な機能

同じクラスの 2 つのインスタンスのすべての属性が等しい場合、比較演算子 == を使用して判断できます。 2 つの変数が同じオブジェクトへの参照であるかどうかを判断する必要がある場合は、等価演算子 === を使用して判断できます。

class Car {
 private static $speed = 10;
 
 public static function getSpeed() {
  return self::$speed;
 }
 
 public static function speedUp() {
  return self::$speed+=10;
 }
}
class BigCar extends Car {
 public static function start() {
  parent::speedUp();
 }
}

BigCar::start();
echo BigCar::getSpeed();

オブジェクトのコピー。一部の特殊なケースでは、キーワード clone を使用してオブジェクトをコピーできます。このとき、__clone メソッドが呼び出され、このマジック メソッドを通じて属性の値が設定されます。

class Car {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo '=='; //true
if ($a === $b) echo '==='; //false

オブジェクトのシリアル化。オブジェクトは、serialize メソッドを通じて文字列にシリアル化され、データの保存または転送に使用され、必要に応じてアンシリアル化して使用できるオブジェクトに逆シリアル化されます。

class Car {
 public $name = 'car';
 
 public function __clone() {
  $obj = new Car();
  $obj->name = $this->name;
 }
}
$a = new Car();
$a->name = 'new car';
$b = clone $a;
var_dump($b);

4. PHP string の文字列の長さを取得する

php には、文字列の長さを直接取得できる魔法の関数があります。この関数は strlen() です。

class Car {
 public $name = 'car';
}
$a = new Car();
$str = serialize($a); //对象序列化成字符串
echo $str.&#39;<br>&#39;;
$b = unserialize($str); //反序列化为对象
var_dump($b);

strlen関数は英語の文字の計算には非常に優れていますが、漢字があった場合に長さを計算したい場合はどうすればよいでしょうか?

mb_strlen() 関数を使用して、文字列内の中国語の長さを取得できます。

$str = &#39;hello&#39;;
$len = strlen($str);
echo $len;//输出结果是5

5. PHP 文字列の書式設定文字列

$str = '99.9'; という文字列がある場合、この文字列を 99.90 にするにはどうすればよいでしょうか?

PHPのフォーマットされた文字列関数sprintf()を使用する必要があります

関数の説明: sprintf (フォーマット、変換される文字列)

戻り値: フォーマットされた文字列

$str = "我爱你";
echo mb_strlen($str,"UTF8");//结果:3,此处的UTF8表示中文编码是UTF8格式,中文一般采用UTF8编码

それを説明してください、上記の例のフォーマット

%01.2f とはどういう意味ですか?

1. この%記号は先頭を意味し、指定した形式が開始されていることを意味します。 つまり「開始文字」、「変換文字」が現れるまでフォーマットは終了します。

2. % 記号の後ろにあるのは 0 で、これは「空白埋め文字」で、その位置が空の場合は 0 で埋められることを意味します。

3. 0 の次は 1 です。この 1 は、すべての文字列プレースホルダーが 1 桁以上でなければならないことを規定しています (小数点もプレースホルダーです)。

1を6に変更すると、$resultの値は099.90になります

小数点以下2桁必要なので、99.90には合計5つのプレースホルダーがあり、6つのプレースホルダーが必要になるので、それを埋めます0フルです。

4. %01の後の.2(点2)は、小数点以下が2桁でなければならないことを意味します。 この時の$strの値が9.234だとすると、$resultの値は9.23となります

なぜ4が足りないのでしょうか? なぜなら、上記の規定によれば、小数点以降は 2 桁のみを占める必要があり、また占有できるのは 2 桁だけであるためです。 ただし、$str の値は小数点以下 3 桁を占めるため、仮数部 4 が削除され、23 だけが残ります。

5. 最後にf「変換文字」で終わります。

6. 文字列のPHP文字列エスケープ

php文字列エスケープ関数

関数の説明: 特殊文字にエスケープ文字を追加し、文字列を返すために使用されますaddslashes()

返回值:一个经过转义后的字符串

$str = "what&#39;s your name?";
echo addslashes($str);//输出:what\&#39;s your name?

以上がPHP に関する実用的だが見落とされやすい知識を要約する (推奨)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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