PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/opt/remi/php80/root/usr/share/doc/php80-php-common/
Upload File :
Current File : //opt/remi/php80/root/usr/share/doc/php80-php-common/UPGRADING.INTERNALS
PHP 8.0 INTERNALS UPGRADE NOTES

1. Internal API changes
  a. Object Handlers API
  b. ZEND_OVERLOADED_FUNCTION and corresponding call_method() object handler
  c. TSRM changes
  d. get() and set() object handlers
  e. zend_parse_parameters 'L' specifier
  f. Arginfo argument types
  g. zend_free_op type and should_free argument of zend_get_zval_ptr()
  h. zend_value_error()
  i. get_closure() object handler
  j. compare_objects() and compare() object handlers
  k. The 'I' length modifier
  l. Some VM instructions switched to IS_TMP_VAR result instead of IS_VAR
  m. All internal functions must have arginfo
  n. zend_hash_sort compare function and zend_hash_sort signature change
  o. cast_object() object handler is now required
  p. ARG_COUNT() macro removed
  q. GC_COLLECTABLE flag
  r. Cannot implement Traversable only
  s. zend_fcall_info no_separation flag removed
  t. Signature changes
  u. Error Notification callbacks to replace zend_error_cb overwrite use-cases
  v. Removed Zend APIs
  w. Renamed Zend APIs
  x. ZEND_EXT_NOP no longer emitted

2. Build system changes
  a. Abstract
  b. Unix build system changes
  c. Windows build system changes

3. Module changes

========================
1. Internal API changes
========================

  a. The Object Handlers API was changed to receive zend_object* instead of
     zval* and zend_string* instead of zval* for property names. See also
     section t for other similar changes.

  b. ZEND_OVERLOADED_FUNCTION and corresponding call_method() object handler
     were removed. ZEND_INTERNAL_FUNCTION with ZEND_ACC_CALL_VIA_HANDLER and
     defined "handler" callback should be used instead. This "handler" callback
     should also take care about function cleanup. See ext/zend_test/test.c
     for example.

  c. The following things have been removed from TSRM:
      - TSRMLS_DC
      - TSRMLS_D
      - TSRMLS_CC
      - TSRMLS_C
      - TSRMLS_FETCH
      - TSRMLS_FETCH_FROM_CTX
      - TSRMLS_SET_CTX
      - tsrm_new_interpreter_context
      - tsrm_set_interpreter_context
      - tsrm_free_interpreter_context
      - support for GNUPTH, SGI ST, and BETHREADS

  d. The get() and set() object handlers have been removed. The get() handler
     can generally be replaced with cast_object(). Some uses of set() may be
     replaced by do_operation(). If set() was used to overload direct
     assignments using "=", then this is no longer supported and the
     functionality should be provided in some other way (for example, as
     modification of an object property).

  e. The zend_parse_parameters 'L' specifier and the Z_PARAM_STRICT_LONG()
     family of macros have been removed. Use 'l' and Z_PARAM_LONG() instead,
     which, despite the confusing name, actually have stricter input validation.

  f. Arginfo argument types for internal functions are no longer checked.
     Instead type checks should be performed using the zend_parse_parameters()
     or ZEND_PARSE_PARAMETERS_*() APIs.

  g. The zend_free_op type and the "should_free" and "type" arguments of
     zend_get_zval_ptr() were removed. It's possible to get the old
     "should_free" value using the following code:

         zval *ret = zend_get_zval_ptr(
             opline, opline->op1_type, &opline->op1, execute_data);
         zval *should_free = (op_type & (IS_TMP_VAR|IS_VAR)) ? ret : NULL;

  h. Added the zend_value_error() function, which is intended to be used
     to raise ValueError when inappropriate argument values are passed
     to functions.

  i. get_closure() object handlers now accept an additional zend_bool parameter
     `check_only`. If it is true, the handler is called to check whether the
     object is callable; in this case the handler should not throw an exception.

  j. compare_objects() handler was removed. Extensions should use compare() object
     handler instead and check if both arguments are objects and have the same
     compare handler, using ZEND_COMPARE_OBJECTS_FALLBACK() macro.

  k. The 'I' length modifier, used to denote 32 and 64bit integer from the custom
     snprintf and spprintf implementations has been removed.
     Use the ZEND_LONG_FMT, ZEND_ULONG_FMT and ZEND_XLONG_FMT macros defined in
     php-src/Zend/zend_long.h

     The 'v' format from the custom snprintf and spprintf implementations has
     been removed. Use the standard 's' format instead.

  l. Some VM instructions switched to IS_TMP_VAR result instead of IS_VAR.
     Actually, all assignments (ZEND_ASSIGN, ZEND_ASSIGN_DIM, ZEND_ASSIGN_OBJ,
     ZEND_ASSIGN_STATIC_PROP), all compound assignments (ZEND_ASSIGN_OP,
     ZEND_ASSIGN_DIM_OP, ZEND_ASSIGN_OBJ_OP, ZEND_ASSIGN_STATIC_PROP_OP) and all
     pre increments/decrements (ZEND_PRE_INC, ZEND_PRE_DEC, ZEND_PRE_INC_OBJ
     ZEND_PRE_DEC_OBJ, ZEND_PRE_INC_STATIC_PROP ZEND_PRE_DEC_STATIC_PROP).

  m. All internal functions and methods are now required to specify arginfo
     information, otherwise warnings will be thrown on startup.

  n. The zend_hash_sort and zend_hash_minmax APIs now accept a comparison
     function with the following signature:

         typedef int (*bucket_compare_func_t)(Bucket *a, Bucket *b);

     Previously compare_func_t was used, which accepted void pointers.
     Furthermore, the return type of zend_hash_sort and zend_ts_hash_sort has
     been changed from int to void; these functions always succeed.

  o. The cast_object() handler is now required, i.e. must be non-null. You can
     indicate that casting is not supported by always returning FAILURE.

  p. The ARG_COUNT() macro has been removed use ZEND_NUM_ARGS() instead.

  q. GC_COLLECTABLE flag was inverted into GC_NOT_COLLECTABLE.
     Assignments to GC_TYPE_INFO() might need to be changed to properly
     set the value of the GC_NOT_COLLECTABLE flag.

  r. Just for for userland classes, it is no longer allowed to implement only
     the Traversable interface. Instead, it is necessary to implement either
     Iterator or IteratorAggregate. You can do the latter by implementing
     zend_ce_aggregate and providing the following method implementation:

         ZEND_METHOD(MyClass, getIterator) {
             ZEND_PARSE_PARAMETERS_NONE();
             zend_create_internal_iterator_zval(return_value, ZEND_THIS);
         }

  s. The zend_fcall_info no_separation flag has been removed, and separation is
      never allowed. If you wish to pass (or allow passing) arguments by
      reference, explicitly create those arguments as references using
      ZEND_MAKE_REF. This removal also affects call_user_function_ex(), which
      should be replaced by call_user_function().

  t. The following ZEND_API function have changed signature:
     1. Void in Zend Engine 4.0:
        - add_assoc_*()
        - add_index_*()
        - add_property_*()
        - object_init()
        - zend_declare_class_constant*()
        - zend_declare_property*()
        - zend_startup_modules()
        - zend_wrong_parameters_none_error()
        - zend_fcall_info_argp()
        - zend_fcall_info_argv()
        - zend_fcall_info_argn()
        - zend_startup()
        - zend_set_memory_limit()
        - pass_two()
        - zend_startup_constants()
        - zend_shutdown_constants()
        - zend_startup_extensions_mechanism()
        - zend_startup_extensions()
        - zend_register_extension()
        - highlight_string()
        - zend_ini_startup()
        - zend_ini_shutdown()
        - zend_ini_global_shutdown()
        - zend_ini_deactivate()
        - zend_copy_ini_directives()
        - zend_prepare_string_for_scanning()
        - zend_init_rsrc_list()
        - zend_list_close()
        - zend_signal()
        - zend_sigaction()
        - zend_stack_init()
        - zend_stack_del_top()
        - zend_stack_destroy()
     2. Argument int to uint32_t in Zend Engine 4.0:
        - _zend_get_parameters_array_ex()
        - zend_copy_parameters_array()
        - zend_fcall_info_args_save()
        - zend_fcall_info_args_restore()
        - zend_fcall_info_argp()
        - zend_fcall_info_argv()
        - zend_fcall_info_argn()
        - zend_wrong_parameter*()
        - zend_wrong_callback_error()
        - zend_parse_arg_class()
     3. Argument int to bool in Zend Engine 4.0:
        - add_next_index_bool()
        - zend_register_class_alias_ex()
        - add_assoc_bool_ex()
        - add_index_bool()
        - zend_fcall_info_args_clear()
        - zend_set_local_var()
        - zend_set_local_var_str()
        - zend_parse_arg_*()
        - shutdown_memory_manager()
        - zend_memory_usage()
        - zend_memory_peak_usage()
        - zend_mm_shutdown()
        - zend_eval_string*()
        - zend_set_timeout()
        - _zend_hash_append_ex()
        - _zend_hash_append_ptr_ex()
        - zend_alter_ini_entry_ex()
        - (*zend_encoding_list_parser) typedef
        - zend_multibyte_parse_encoding_list()
        - zend_safe_address()
        - zend_string_tolower_ex()
        - zend_string_alloc()
        - zend_string_safe_alloc()
        - zend_string_init()
        - zend_string_dup()
        - zend_string_realloc()
        - zend_string_extend()
        - zend_string_truncate()
        - zend_string_safe_realloc()
        - zend_string_release_ex()
        - zend_ts_hash_merge()
        - zend_ts_hash_sort()
     4. Argument int to size_t in Zend Engine 4.0:
        - zend_set_hash_symbol()
     5. Argument zval* to zend_object* in Zend Engine 4.0:
        - zend_read_property()
        - zend_update_property()
        - zend_unset_property()
        - zend_call_method()
        - zend_objects_clone_obj()
        - zend_get_closure_method_def()
        - zend_throw_exception_hook()
        - zend_throw_exception_internal()
        - zend_get_exception_base()
     6. Argument zval* to zend_long in Zend Engine 4.0:
        - _php_math_longtobase()
     7. Return type from int to zend_result in Zend Engine 4.0:
        - (*stream_open_function) in _zend_utility_functions
        - (*zend_post_startup_cb)
        - (*zend_preload_autoload)
        - zend_execute_scripts()
        - zend_post_startup()
        - _zend_get_parameters_array_ex()
        - zend_copy_parameters_array()
        - zend_parse_parameters()
        - zend_parse_parameters_ex()
        - zend_parse_method_parameters()
        - zend_parse_method_parameters_ex()
        - zend_parse_method_parameters()
        - zend_register_functions()
        - zend_startup_module()
        - zend_startup_module_ex()
        - zend_register_class_alias_ex()
        - zend_disable_function()
        - zend_disable_class()
        - zend_update_class_constants()
        - zend_update_static_property*()
        - object_init_ex()
        - object_and_properties_init()
        - add_index_zval()
        - add_next_index_long_*()
        - array_set_zval_key()
        - _call_user_function_impl()
        - zend_fcall_info_*()
        - zend_call_function()
        - zend_set_hash_symbol()
        - zend_delete_global_variable()
        - zend_set_local_var()
        - zend_set_local_var_str()
        - zend_forbid_dynamic_call()
        - zend_get_default_from_internal_arg_info()
        - zend_try_assign_typed_ref*()
        - zend_ast_evaluate()
        - zend_startup_builtin_functions()
        - do_bind_function()
        - do_bind_class()
        - zend_unmangle_property_name_ex()
        - zend_register_auto_global()
        - zend_register_constant()
        - zend_exception_error()
        - zend_eval_string*()
        - zend_undefined_offset_write()
        - zend_undefined_index_write()
        - zval_update_constant(_ex)()
        - zend_load_extension()
        - zend_load_extension_handle()
        - zend_hash_del(_ind)()
        - zend_hash_str_del(_ind)()
        - zend_hash_index_del()
        - zend_hash_move_forward_ex()
        - zend_hash_move_backward_ex()
        - zend_hash_get_current_key_ex()
        - zend_hash_get_current_key_type_ex()
        - zend_symtable_del(_ind)()
        - zend_symtable_str_del(_ind)()
        - highlight_file()
        - zend_do_link_class()
        - zend_alter_ini_entry*()
        - zend_restore_ini_entry()
        - zend_ini_register_displayer()
        - zend_ini_open_file_for_scanning()
        - zend_ini_prepare_string_for_scanning()
        - zend_user_it_valid()
        - zend_create_internal_iterator_zval()
        - zend_multibyte_set_filter()
        - zend_lex_tstring()
        - _zend_module_entry module_startup_func, module_shutdown_func,
          request_startup_func, request_shutdown_func, and post_deactivate_func function pointers
        - (*zend_encoding_list_parser) typedef
        - (*zend_encoding_internal_encoding_setter) typedef
        - zend_multibyte_set_functions()
        - zend_multibyte_set_script_encoding_by_string()
        - add_function()
        - sub_function()
        - mul_function()
        - pow_function()
        - div_function()
        - mod_function()
        - boolean_xor_function()
        - boolean_not_function()
        - bitwise_not_function()
        - bitwise_or_function()
        - bitwise_and_function()
        - bitwise_xor_function()
        - shift_left_function()
        - shift_right_function()
        - concat_function()
        - is_equal_function(
        - is_identical_function()
        - is_not_identical_function()
        - is_not_equal_function()
        - is_smaller_function()
        - is_smaller_or_equal_function(zv
        - increment_function()
        - decrement_function()
        - zend_stream_open()
        - zend_stream_fixup()
        - zend_ts_hash_del()
        - zend_ts_hash_index_del()
     8. Return type from int to bool in Zend Engine 4.0:
        - zend_make_printable_zval()
        - zend_parse_arg_*()
        - is_zend_mm()
        - is_zend_ptr()
        - zend_mm_is_custom_heap()
        - (*zend_mm_chunk_truncate_t)
        - (*zend_mm_chunk_extend_t)
        - zend_bitset_empty()
        - zend_is_smart_branch()
        - zend_check_arg_send_type()
        - zend_verify_const_access()
        - zend_gdb_register_code()
        - zend_gdb_present()
        - _zend_handle_numeric_str(_ex)()
        - zend_hash_exists_ind()
        - zend_hash_str_exists_ind()
        - zend_symtable_exists(_ind)()
        - zend_symtable_str_exists()
        - (*zend_encoding_lexer_compatibility_checker)
        - zend_object_is_true()
        - i_zend_is_true()
        - zendi_smart_streq()
        - zend_stack_is_empty()
        - zend_ts_hash_exists()
        - zend_ts_hash_index_exists()
     9. Argument void to const char* in Zend Engine 4.0:
        - zend_get_op_array_extension_handle()
     10. Argument zend_extension to const char* in Zend Engine 4.0:
        - zend_get_resource_handle()
     11. Argument const char * to HMODULE in Zend Engine 4.0:
        - php_win32_image_compatible()
     12. const char * argument dropped in Zend Engine 4.0:
        - php_win32_crt_compatible()

  u. Instead of overwriting zend_error_cb extensions with debugging, monitoring
     use-cases catching Errors/Exceptions are strongly encouraged to use
	 the new error observer API instead.

	 Error observering callbacks are guaranteed to be called regardless of
	 the users error_reporting setting or userland error handler return values.

     Register observer callbacks during MINIT of an extension:

		void my_error_observer_cb(int type,
			const char *error_filename,
			uint32_t error_lineno,
			zend_string *message) {
		}
		zend_observer_error_register(my_error_observer_cb);

  v. The following APIs have been removed from the Zend Engine:
     - zend_ts_hash_init_ex(), drop the last argument and use zend_ts_hash_init() instead
     - zend_hash_init_ex(), drop the last argument and use zend_hash_init() instead
     - zval_internal_dtor(), use zval_internal_ptr_dtor() instead
     - zval_dtor_func(), use rc_dtor_func() instead
     - zval_ptr_dtor_wrapper(), use zval_ptr_dtor() instead
     - zval_internal_ptr_dtor_wrapper(), use zval_internal_ptr_dtor() instead

  w. The following APIs have been renamed:
     - _zend_ts_hash_init() to zend_ts_hash_init()

  x. In COMPILE_EXTENDED_STMT mode, a ZEND_EXT_NOP opcode will no longer be
     generated at the start of a function. Use the new observer APIs or hook
     into zend_execute_ex instead.

========================
2. Build system changes
========================

  a. Abstract
    1.  Symbol HAVE_HASH_EXT is removed and is no longer defined. It should be
        considered to have hash extension always available since PHP 7.4.

    2.  Symbol HAVE_PCRE is removed and is no longer defined. It should be
        considered to have pcre extension always available since PHP 7.4.

    3.  Symbol HAVE_LOCALE_H has been removed and is no longer defined.

    4.  --disable-inline-optimization (which actually disabled all compiler
        optimizations) has been removed. If you wish to build PHP on a host
        with extremely constrained memory, and compilation fails with an "out
        of memory" message, add "-O0" to CFLAGS.

    5.  build system and provider are displayed in phpinfo from environment:
        - PHP_BUILD_SYSTEM (default is same as PHP_UNAME)
        - PHP_BUILD_PROVIDER (no default)

  b. Unix build system changes

    1.  --enable-maintainer-zts is renamed --enable-zts for parity with Windows
        and as recognition that ZTS is not a "maintainer" or experimental
        feature.

    2.  The PHP_CHECK_GCC_ARG() m4 macro has been removed in favor of
        AX_CHECK_COMPILE_FLAG().

    3. The 6th argument of PHP_ADD_SOURCES_X has been removed.

    4. The 'special-flags' (3rd) argument of PHP_ADD_SOURCES_X are
       now appended instead of prepended to previous compiler flags.
       This means compiler flags passed to PHP_NEW_EXTENSION and PHP_ADD_SOURCES
       are now appended, this allows to disable compiler flags set by Zend/Zend.m4
       (e.g. disable certain compiler flags enabled by -Wextra)

  c. Windows build system changes

    - The configuration option --enable-crt-debug has been removed. The VC
      debug heap can now be enabled for debug builds by setting the environment
      variable PHP_WIN32_DEBUG_HEAP to a non-negative number before PHP process
      startup.

========================
3. Module changes
========================