ホームページ バックエンド開発 PHPチュートリアル PHPのフロー制御文と条件判定におけるデータ型変換

PHPのフロー制御文と条件判定におけるデータ型変換

Jun 20, 2016 pm 01:01 PM
php

PHP フロー制御文と条件判定におけるデータ型変換

PHPのフロー制御文には、ループ本体文と分岐判定文が含まれます。

ループ操作には、while、do-while、for ループという 3 つのステートメント グループが含まれます。

分岐判定本体には、if else文とswitch文の2つのグループが含まれます。

以下は、PHP のフロー制御ステートメントにおけるデータ型変換と条件判断を理解するためのいくつかの質問です。

********************************************** *****

質問 1. if-else 文と条件判断に伴うデータ型変換

********************************************** *****

<?php
/*习题*/
/*1。写出下列代码的运行结果*/
	if(5<4)
		echo "true";
	else
		echo "false-1"."<br />";
	if("0")
		echo "true";
	else
		echo "false-2"."<br />";
	if($i)
		echo "true";
	else
		echo "false-3"."<br />";
	if("false")
		echo "true";
	else
		echo "false-4"."<br />";
	if(false)
		echo "true";
	else
		echo "false-5"."<br />";

	if(0.0)
		echo "true";
	else
		echo "false-6"."<br />";
	if(php)
		echo "true";
	else
		echo "false-7"."<br />";
	if("")
		echo "true";
	else
		echo "false-8"."<br />";
	if(null)
		echo "true";
	else
		echo "false-9"."<br />";
	if(array(12))
		echo "true";
	else
		echo "false-10"."<br />";
	if(array())
		echo "true";
	else
		echo "false-11"."<br />";
		
/*
	输出结果:
	false-1
	false-2
	false-3
	true false-5
	false-6
	true false-8
	false-9
	true false-11
	
	分析:if语句当条件不满足(即条件表达式计算结果为false)都会返回假。php的if语句没有then,有elseif(同else if)
	当转换为boolean时候,以下值被认为是false:
	1)布尔值false;
	2)整型值0(零);
	3)浮点型值0.0(零);
	4)空白字符串和字符串“0”;
	5)没有成员变量的数组;
	6)没有单元的对象(仅适用于PHP4);
	7)特殊类型NULL(包括尚未设定的变量);
*/						



?>
ログイン後にコピー

********************************************** *****
質問 2. switch-case-default ステートメントと Break ステートメントの関係

********************************************** *****

<?php
/*2。写出下列代码的运行结果*/
	$a = "linux";
	switch($a){
		//echo "hello";
		case 'lamp':
			echo "one";
			break;
		case php:
			echo "five";
			break;
		case 'linux'://用不用引号均可
			echo "six"."<br />";
		case 6:
			echo "??";	
		case '8':
			echo "|||";
		case 10:
			echo "10"."<br />";
			break;//如果去掉此break将输出default分支的@@
		default:
			echo "@@";
			break;
	
	}
/*
运行结果为:
six
??|||10

分析:请注意以上switch-case-default语句中,有的地方是没有break语句的。
①default在所有case开关中,总是最后执行。
②一旦switch的条件判断进入了一个开关(包括default),如果这个开关里面没有break跳出语句,则这个开关之后的语句被当做普通程序语句来执行,直到遇到break为止(比如:如果条件满足了case 2开关,而case 2开关里面没有break语句,则case 2之后的语句被当做普通程序语句执行,case判断不再有效。)。而如果进入的这个开关里面有break语句,则执行完之后就跳出switch。
③当前一语句的case语句为空时候,控制器自动转移到下一case语句。
由此可见,使用switch的时候,如果case里面没有break,这个程序是相当危险的,这其中潜伏着的漏洞即使经验丰富的测试人员也可能很难发现。

参考w3school的解释:

工作原理:

    1、对表达式(通常是变量)进行一次计算
    2、把表达式的值与结构中 case 的值进行比较
    3、如果存在匹配,则执行与 case 关联的代码
    4、代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
    5、如果没有 case 为真,则使用 default 语句


*/
?>
ログイン後にコピー

********************************************** *****

質問 3、switch-case-default ステートメントとデータ型の自動変換

********************************************** *****

<?php 
/*3。写出下列代码的运行结果*/
	$a = "abc";  
	switch ($a) {
		case 0: 
			echo "a 为 0";
			break;
		case "cdef": 
			echo "a 为 cdef";
			break;
		case "abc": 
			echo "a 为 abc";
			break;
		default:
			echo "a 什么都不是";
			break;
	}
	/*输出结果:a 为 0
	
	分析:
	这个问题应该从PHP作为动态脚本语言说起:
	动态语言的变量类型是随存储的变量而变化的,即变量类型是根据具体环境而进行变化的。
	字符串"abc",从表面来看可能指确切字符串,但是对于PHP存储的时候它是不能确定的,因为随着语义的变化,其所起的作用也会变化
	第一个case 0:,PHP脚本将常量0解释为确切的整数,与字符串比较大小时,需要将字符串转换为整数。PHP脚本解释器会自动将字符串abc,从十进制(默认)转换为数字,但是abc很明显不能代表十进制数,即转换失败,此时PHP将结果置为0,如果将字符串表示为"0xabc",那么PHP脚本能够发现0x标识,将abc作为十六进制转换,所以能够得到abc标识的十六进制整数。

	如果学过C语言,可以做一个简单比较:
	C中的case必须是数字常量,而不能是字符串,就因为C是变量类型确定的,运行时不能将确定的变量按语义随意转换。而PHP可以,因为PHP语言是动态的,变量类型是动态的。

	或者从PHP的例子中学习:
	如果一个文件将111111字符串(不是数字)存储到文件,然后从文件直接读取到变量$a,如下语法就可以将$a作为整数计算:0+$a
	上述表达式得到的结果也可以作为动态语言的一个变现来看
	
	*/
?>
ログイン後にコピー

********************************************** *****

質問 4: プログラミングの省略と間違いやすい点 - 比較演算子と代入演算子の違い

********************************************** *****

<?php 
/*4。写出下列代码的运行结果*/
	if($i = ""){
		echo "a";
	
	}
	else {
		echo "b";
	}
	/* 输出结果:b
	这里的条件表达式不是比较运算符==,而是赋值运算符=,显然,空字符串和字符串0都为false。
	*/

?>
ログイン後にコピー

上記の 4 つの例を通して、PHP の基本文法を前提とした PHP 言語の使用規則、特に PHP のフロー制御文と条件判断におけるデータ型変換について、より深く理解することができます。この知識を習得すると、コーディングの良い習慣を身につけ、現実の罠を回避し、開発効率を向上させることができます。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles