当前位置: 首页 > 后端技术 > PHP

让我们谈谈PHP中的类型约束

时间:2023-03-30 05:03:21 PHP

璧风偣銆備紬鎵€鍛ㄧ煡锛孭HP鏄竴绉嶅急绫诲瀷璇█銆備笌鍏朵粬寮虹被鍨嬭瑷€椤圭洰鐩告瘮锛岃繖鏂归潰浼氭湁寰堝鍧戙€備絾鏄紝PHP7寮€鍙戝嚭鏉ヤ箣鍚庯紝PHP涔熸湁浜嗙被鍨嬬害鏉熴€傛寚鐨勬槸锛屽湪Laravel绛夊緢澶氭祦琛岀殑妗嗘灦涓骞挎硾浣跨敤锛屽洜涓哄畠纭疄鍦ㄨ蒋浠跺紑鍙戣繃绋嬩腑鏃犺鏄繍琛岃繕鏄疘DE浠g爜鎻愮ず閮借兘缁欐垜浠甫鏉ュ緢澶х殑鏂逛究锛屼笅闈㈡垜浠竴姝ユ鏉ョ湅鍙傝PHP涓殑Typeconstraints.鍓嶆湡绾︽潫铏界劧PHP鏄殣寮忚浆鎹紝浣嗘槸鍦ㄥ疄闄呭紑鍙戜腑浼氬嚭鐜颁竴浜涗笉鑳借浆鎹㈢殑鍥板銆傚綋鐒讹紝杩欎簺闂鍦ㄥ紑鍙戦樁娈靛緢瀹规槗鍙戠幇锛屼絾鏄鏋滀竴浜涘姩鎬佺殑鍐呭璁╁畠鏃犳硶鎺у埗锛屽氨浼氬嚭鐜板湪鐢ㄦ埛闈㈠墠銆傚湪瀹冨墠闈紝涔熷氨鏄疊UG锛孭HP涓湁涓€鎵筰s_*寮€澶寸殑鏂规硶锛屽仛涓€浜涚畝鍗曠殑绫诲瀷鍒ゆ柇锛堝叾涓竴浜涙柟娉曚篃鏄柊鐨勬柟娉曪紝娌℃湁缈昏瘧锛夈€俰s_array鈥旀鏌ュ彉閲忔槸鍚︿负鏁扮粍is_bool鈥旀鏌ュ彉閲忔槸鍚︿负甯冨皵鍊糹s_callable鈥旀鏌ュ弬鏁版槸鍚︿负鏈夋晥鐨勫彲璋冪敤缁撴瀯is_countable鈥旈獙璇佸彉閲忕殑鍐呭鏄惁涓哄彲鏁板€糹s_double鈥攊s_float鐨勫埆鍚峣s_float鈥旀鏌ュ彉閲忔槸鍚︿负娴偣绫诲瀷is_int鈥旀鏌ュ彉閲忔槸鍚︿负鏁存暟is_integer鈥攊s_iterable鐨勫埆鍚嶁€旈獙璇佸彉閲忕殑鍐呭鏄惁涓哄彲杩唬鍊糹s_long鈥攊s_int鐨勫埆鍚峣s_null鈥旀鏌ュ彉閲忔槸鍚︿负NULLis_numeric鈥旀鏌ュ彉閲忔槸鍚︿负鏁板瓧鎴栨暟瀛楀瓧绗︿覆is_object鈥旀鏌ュ彉閲忔槸鍚︿负瀵硅薄is_real鈥攊s_float鐨勫埆鍚峣s_resource鈥旀鏌ュ彉閲忔槸鍚︿负璧勬簮绫诲瀷is_scalar鈥旀鏌ュ彉閲忔槸鍚︿负鏍囬噺is_string鈥旀鏌ユ槸鍚︿竴涓彉閲忔槸涓€涓瓧绗︿覆is_a鈥旀鏌ュ璞℃槸鍚﹀睘浜庣被鎴栬€呮槸瀵硅薄鐨勭埗绫昏繑鍥濼RUEis_subclass_of鈥斿鏋滃璞℃槸绫荤殑瀛愮被锛屽畠杩斿洖姝g‘銆傚湪PHP5涔嬪墠锛屽鏋滄垜浠鍋氱被鍨嬬害鏉燂紝閭d箞鎴戜滑蹇呴』浣跨敤杩欎簺銆傝繖浜涙柟娉曞鍙傛暟杩涜澶嶆潅鐨勫垽鏂紝骞跺鐞嗛敊璇繑鍥炵粰璋冪敤鑰呫€備絾鏄粠PHP5寮€濮嬶紝鍦ㄩ潰鍚戝璞′腑锛岀粰鏂规硶甯︽潵浜嗙被鍨嬬害鏉燂紝浣嗘槸杩欎簺閮藉緢楦¤倠锛屼粠鏂囨。涓彲浠ョ湅鍑恒€侾HP5鏀寔瀵硅薄銆佹帴鍙o紝PHP5.1鏀寔鏁扮粍PHP5.4鏀寔鍖垮悕鍑芥暟绫诲瀷绾︽潫涓嶈兘鐢ㄤ簬鏍囬噺绫诲瀷锛屼緥濡俰nt鎴杝tring銆傜壒寰佷篃鏄笉鍏佽鐨勩€傚叾瀹濸HP5涓殑绗竴椤瑰浜庡ぇ閮ㄥ垎鍦烘櫙鏉ヨ宸茬粡瓒冲浜嗭紝浣嗘槸涔熸湁涓€浜涜嚧鍛界殑闂锛屾瘮濡傛渶鍚庝竴椤逛笉鏀寔鏍囬噺绫诲瀷锛屼篃灏辨槸璇存敮鎸佷笉鏄緢鍏ㄩ潰锛岃繕鏈変竴绉嶆儏鍐垫槸娌℃湁鑰冭檻杩囥€俷ull铏界劧null鏄竴绉嶇壒娈婄殑绫诲瀷锛屼絾鏄湁鏃跺€欏湪鏁版嵁涓嶅彲鎺х殑鎯呭喌涓嬩篃浼氬嚭鐜般€傝€屼笖锛屽湪PHP5闃舵锛岀被鍨嬬害鏉熷苟娌℃湁寰楀埌寰堝ソ鐨勫埄鐢ㄣ€備篃璁稿湪閭d釜鏃跺€欒繕娌℃湁閭d箞閲嶈銆傛瘯绔燂紝寮辩被鍨嬫槸PHP鐨勪竴澶х壒鑹诧紝浣嗕篃鏄嚧鍛戒激锛屽湪寰堝鎯呭喌涓嬬敋鑷宠寮虹被鍨嬭瑷€鐗电潃榧诲瓙璧般€侾HP7PHP7鏄浠ュ墠PHP鐗堟湰鐨勫叏闈㈡洿鏂般€傞敊璇拰寮傚父澶勭悊鏍囬噺绫诲瀷澹版槑杩斿洖鍊肩被鍨嬪0鏄庡彲浠ヤ负绌猴紙Nullable锛夌被鍨嬶紙PHP7.1锛塚oid鍑芥暟鏇村姞寮曚汉娉ㄧ洰锛屽洜涓哄畠鏀硅繘浜嗗绫诲瀷闄愬埗鐨勬敮鎸侊紝寮ヨˉ浜嗕箣鍓嶇殑涓嶈冻锛屽寘鎷爣閲忕被鍨嬪拰杩斿洖鍊肩被鍨嬶紝骞朵笖鍦≒HP7.1涓坊鍔犱簡涓ユ牸鐨勭被鍨嬮獙璇併€傚己鍒剁被鍨嬮獙璇乻trict_types/declare()鎸囦护榛樿灏嗘墍鏈塒HP鏂囦欢缃簬寮辩被鍨嬮獙璇佹ā寮忋€傛柊澧瀌eclare鎸囦护锛岄€氳繃鎸囧畾strict_types鐨勫€硷紙1鎴?锛夛紝1琛ㄧず涓ユ牸绫诲瀷楠岃瘉妯″紡锛屼綔鐢ㄤ簬鍑芥暟璋冪敤鍜宺eturn璇彞锛?琛ㄧず寮辩被鍨嬮獙璇佹ā寮忋€俤eclare(strict_types=1)蹇呴』鏄枃浠朵腑鐨勭涓€鏉¤鍙ャ€傚鏋滆繖鏉¤鍙ュ嚭鐜板湪鏂囦欢鐨勫叾浠栧湴鏂癸紝灏变細浜х敓缂栬瘧閿欒锛屽潡妯″紡琚槑纭姝€備笌encoding鎸囦护绫讳技锛屼絾涓巘icks鎸囦护涓嶅悓鐨勬槸锛宻trict_types鎸囦护鍙奖鍝嶆寚瀹氱殑鏂囦欢锛屼笉褰卞搷瀹冨寘鍚紙閫氳繃include绛夛級鐨勫叾浠栨枃浠躲€傝鎸囦护鍦ㄨ繍琛屾椂缂栬瘧锛屼笉鑳戒慨鏀广€傚畠鐨勫伐浣滄柟寮忔槸鍦ㄦ搷浣滅爜涓缃竴涓爣蹇楋紝浠ヤ究鍑芥暟璋冪敤鍜岃繑鍥炵被鍨嬫鏌ョ鍚堢被鍨嬬害鏉熴€備緥濡傪煂?/闈炰弗鏍兼ā寮?/1锔忊儯functiontestInt():int{return0.01;}//2锔忊儯functiontestStr():string{returntrue;}//3锔忊儯functiontestBool():bool{return"1";}//4锔忊儯functiontestInt2():int{return"1string";}鍙互鐪嬪埌锛屼笂闈㈢殑浠g爜娌℃湁闂锛屼篃涓嶄細鍑虹幇寮傚父銆傚嵆浣垮湪PHP7.2浠ヤ笅鐨勪竴浜涚増鏈腑锛?锔忊儯涔熻兘閫氳繃銆傝繖鏄洜涓篜HP7铏界劧鏈変弗鏍肩殑绫诲瀷楠岃瘉锛屼絾榛樿鏄笉寮€鍚殑锛岄渶瑕佹墜鍔ㄥ紑鍚€傚鏋滃惎鐢ㄦ墜鍔ㄨ缃悗杩斿洖鎴栦紶閫掔殑鍙傛暟涓嶇鍚堝0鏄庣殑绫诲瀷锛岄偅涔圥HP浼氱洿鎺ユ姏鍑轰竴涓猅ypeError閿欒锛岃姹備綘澶勭悊銆傚惎鐢ㄥ己鍒剁被鍨嬮獙璇佸彧鏄湪PHP鏂囦欢椤堕儴娣诲姞浠ヤ笅浠g爜鐨勯棶棰樸€傚0鏄庯紙strict_types=1锛夛紱鍚庢潵杩涜绫诲瀷楠岃瘉锛屼笉浠呮湁鍒╀簬鎴戜滑鐨勭▼搴忓湪杩愯杩囩▼涓幏鍙栧拰杩斿洖鐨勫弬鏁板畬鍏ㄧ鍚堥鏈燂紝杩樻湁涓€涓ソ澶勶紝灏辨槸寮€鍙戝伐鍏蜂腑鐨勭被鍨嬫彁绀恒€傛湁鏃跺€欏彲鑳戒細鍑虹幇杩欐牱鐨勬儏鍐碉紝涓€涓柟娉曚互瀵硅薄鐨勫舰寮忎紶閫掑弬鏁帮紝閲岄潰鏈変竴浜涙柟娉曪紝浣嗘槸IDE灏辨槸涓嶆彁绀恒€傛帴鍙g敤鎴蜂俊鎭瘂getSex();}鎺ュ彛鐢ㄦ埛{getUserInfo();getUserId();getUserName();}functiongetUserSex($user){//浣犱細鍙戠幇杩欓噷鐨勪唬鐮両DE涓嶈兘缁欎綘寰堝ソ鐨勬彁绀猴紝杩樻湁涓€浜涘彲鐢ㄧ殑鏂规硶杩斿洖$user->getUserInfo()->getSex();}classVipUserimportantsUser(){//TODO.....}getUserSex(newVipUser());鍦ㄨ繖绉嶆儏鍐典笅2杩欐槸涓€涓В鍐虫柟妗堛€傚鏋滀綘鏄竴涓」鐩紝鐢变簬PHP5宸茬粡鏀寔浜嗗璞$殑绫诲瀷澹版槑锛岃繖閲屽氨涓嶇敤閭d箞鎷呭績浜嗭紝鐩存帴澹版槑绫诲瀷鍗冲彲銆俧unctiongetUserSex(User$user){//杩欓噷鍙互鎻愮ずreturn$user->getUserInfo()->getSex();}褰撶劧PHPDoc杩樻湁鍙﹀涓€绉嶄娇鐢ㄦ柟寮忥紝灏辨槸娉ㄨВ鏂规锛屽凡缁忓湪PSR-5锛岃櫧鐒惰繕娌℃湁瀹屽叏閫氳繃锛屼絾鏄棭鏈熸湁涓€浜涢潪瀹樻柟鐨凱HPDoc锛屼富娴佺殑IDE宸茬粡瀹屽叏瀹炵幇浜嗭紝甯姪鎴戜滑鎻愬崌寮€鍙戜綋楠屻€傛渶鍚庢€荤粨涓€涓嬶紝PHP涓繎涔庡畬缇庣殑绫诲瀷绾︽潫锛岃鎴戜滑涔嬪墠鐨勪竴浜涗笉鍙兘鎴愪负鍙兘锛岃涓€浜涗笉闈犺氨鐨勫彉寰楁洿鍔犻潬璋憋紝鍑忓皯浠g爜涓洜绫诲瀷绾︽潫甯︽潵鐨勪竴浜涢棶棰橈紝浠庢簮澶翠笂鎻愬崌寮€鍙戜綋楠屻€傚紑鍙戝伐鍏枫€傚弬鑰冭祫鏂橮HP7绫诲瀷鎻愮ず锛氫綔涓篜HP寮€鍙戜汉鍛橈紝鎮ㄥ簲璇ユ案杩滆浣?/p>