1. 서문
최근 PHP가 수학 연산을 수행하는 데 있어 사소하고 무해한 몇 가지 문제에 직면했습니다.
개미집 속에 천리 둑이 무너졌습니다. 유형 변환을 추가하면 매우 쉽게 해결되지만 그냥 놔둘 수는 없을 것 같습니다.
특히 재무 계산을 수행하거나 인터페이스 계산 및 강력한 언어 도킹학생들은 더 많은 관심을 기울여야 합니다.
별거 아닌데, 디테일이 성공과 실패를 결정짓는 법이니까요. 정말 많은 방법이 있고, 저도 교훈을 얻었습니다.
PHP가 약한 유형의 언어라는 것을 정말로 알고 계십니까?
얼마 전 PHP 커널에 대한 연구를 진행하여 PHP 변수의 기본 저장 구조에 대해 자세히 이해했습니다. 그러나 다양한 유형의 연산 프로세스는 이해하지 못했습니다. 값과 변수 유형의 변환 과정.
사실 이는 우리의 지능형 PHP [자동 유형 변환]의 문제이기도 합니다. , 그냥 완전히 공부하고 요약하세요.
(아래 5가지 예시가 있는데 모두 아주 간단한 조작이지만 이유를 알 수 없을 수도 있습니다)
2. 프로세스 분석
사례 1
먼저 제가 겪은 문제(간소화)를 살펴보겠습니다. 제가 이 블로그를 쓰게 된 계기가 되었습니다.$a = '1.11'; $b = '0.11'; var_dump($a);//string(4) "1.11" var_dump($b);//string(4) "0.11" $re = $a - $b; var_dump($re);//float(1)참고: 두 가지 변경 사항이 발생했습니다.
1. 문자열을 빼서 부동 소수점형으로 변환
2. 피감수는 모두 소수점 이하 두 자리이고 결과는 소수점이 아닙니다. [앱에서 소수점 두 자리를 요구하기 때문에 버그가 발생하는 곳이기도 합니다. display 】
마찬가지로 소수가 없는 문자열을 뺄 경우 결과는 int
$a = '11'; $b = '1'; var_dump($a);//string(4) "11" var_dump($b);//string(4) "1" $re = $a - $b; var_dump($re);//int(10)
결론: 1. PHP 기본 연산 과정에서 다음을 입력합니다. 변환은 자동으로 수행되며, 소수는 부동 소수점으로, 정수는 정수로 변환됩니다.
2. 숫자의 소수 자릿수를 제한해야 하는 경우 이를 처리하는 것을 잊지 마세요. number_format();
이 이미 시작되었습니다. 이 유형 변환에 대해 이야기해 보겠습니다.
예 2 질문: 다음 내용은 참인가요, 거짓인가요?
var_dump(0123 == 123); var_dump('0123' == 123); var_dump('0123' === 123);답은 무엇인가요? ?
false;true;false
분석:
===는 강력한 판단이고 유형 비교를 추가하기 때문에 세 번째가 false라고 누구나 쉽게 추측할 수 있다고 생각합니다.
두 가지가 있습니다. 여기서 주의할 점. 한편, PHP의 맨 아래 레이어는 0으로 시작하는 정수를 8진수로 간주합니다. 반면에 sting을 int로 변환할 때 선행 0이 제거됩니다.
var_dump(0123 == 123); // false, PHP의 기본값은 0123입니다. 이는 8진수로 처리되지만 실제로 10진수로 변환하면 83입니다. 분명히 이것은 동일하지 않습니다.
var_dump('0123' == 123); // 여기서는 true입니다. PHP는 '0123'을 숫자로 변환하고 기본적으로 이전 0(123==123)을 제거하는 것이 매우 흥미로울 것입니다.
var_dump(' 0123 ' === 123); // false 분명히 위의 질문에서는 숫자와 문자열 유형이 일치하지 않는다고 말했습니다.
결론: 1. 0으로 시작하는 정수는 PHP에서 8진수로 처리됩니다.
2. 동료의 결론 1 예제 1, 문자열은 연산 중에 자동으로 유형 변환을 수행합니다. 앞의 0은 제거됩니다
예 3 아래 $x의 결과는 무엇입니까:
$x = NULL; if ('0xFF' == 255) { $x = (int)'0xFF'; } $x = ?
答案是什么呢??
$x=0而不是255
注意点:
首先'oxFF' == 255我们好判断,会进行转换将16进制数字转换成10进制数字,0xff = 255。PHP使用is_numeric_string 判断字符串是否包含十六进制数字然后进行转换。
但是$x = (int)'0xFF';是否也会变成255呢?显然不是,将一个字符串进行强制类型转换实际上用的是convert_to_long,它实际上是将字符串从左向右进行转换,遇到非数字字符则停止。因此0xFF到x就停止了。所以$x=0
结论:
1.0开头的整形数字PHP会当作十六进制来处理
2. string->int的过程,是将字符串从左向右进行转换,遇到非数字字符则停止。
事例四
经过下面的运算 $x的值应该是多少?
$x = 3 + "15%" + "$25"
答案是什么呢?? 18
注意点:其实就是前边的所提到的点。3+15+0=18(0时因为从左往右取数字嘛,遇到非数字停止,没有当然为0)
事例五(无关类型转换,但也很有意思)
$a = true && false; var_dump($a); $a = true and false; var_dump($a);
答案是什么呢??
false;true
为什么呢?是对运算符优先级的一个理解,哈哈,提醒到这里自己去查查吧~
事例六
$arr = array(0,1,2,3); foreach ($arr as $key => $value) {} var_dump(current($arr));//最后指针停留在数组结尾,取不到值了输出false $arr = array(0,1,2,3); foreach ($arr as $key => $value) { //$arr其实是进行了一次传值,用的是$arr_copy $arr[$key] = $value;//进行了改值,则发生分离现象 } var_dump(current($arr));//输出1
输出false 与 1;(PHP5.6环境下,php7已经做了修改);
那这个又是为什么呢?【和PHP内核有关,变量分离改变】
위 내용은 PHP 개발자가 거의 항상 실수하는 작업에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
