"PHP" / Говнокод #8147 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
switch(true) {
            case ((0x7F & $bytes) == $bytes):
                // this case should never be reached, because we are in ASCII range
                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                return chr(0x7F & $bytes);

            case (0x07FF & $bytes) == $bytes:
                // return a 2-byte UTF-8 character
                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                return chr(0xC0 | (($bytes >> 6) & 0x1F))
                     . chr(0x80 | ($bytes & 0x3F));

            case (0xFFFF & $bytes) == $bytes:
                // return a 3-byte UTF-8 character
                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                return chr(0xE0 | (($bytes >> 12) & 0x0F))
                     . chr(0x80 | (($bytes >> 6) & 0x3F))
                     . chr(0x80 | ($bytes & 0x3F));
        }

В одной из реализаций JSON.php

* @package Services_JSON
* @author Michal Migurski <mike-json@teczno.com>
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
* @copyright 2005 Michal Migurski
* @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
* @license http://www.opensource.org/licenses/bsd-license.php
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198

Запостил: lobovkin lobovkin, (Updated )

Комментарии (15) RSS

    • я часто применяю, ибо switch выглядит куда красивее чем простыня из эльзеифов. Хотя на любителя, конечно
      Ответить
    • видимо в отсутствии брейков. но при наличии ретурнов - они не обязательны.
      Ответить
    • На сколько я понимаю - первый кейс. Он вообще какой-то странный (особенно комментарий в нем). Т.е. любые значения int & 0x7F - это и есть ASCII range. По какой логике эти значения не попадают в ASCII range - надо спрашивать у автора (он очевидно чего-то в $bytes дописывал...). Ну и кроме того, если уж известно, что 0x7F & $bytes == $bytes, то зачем chr(0x7F & $bytes), когда можно было chr($bytes). Хотя, если автор утверждает, что в этот кейс никогда не попадут (зачем он его писал вообще тогда?) то это не важно.
      Ответить
      • Может быть этот код отрабатывал только когда $bytes >= 128. Но автор был в этом не совсем уверен.
        Ответить
      • Есть еще интеренсое предположение. А что если в далеком будущем (если оно существует для PHP), интерпретатор научится делать предсказание веток. И в switch'е, в котором разные ветки могуть быть выбраны исходя из одного и того же значения получатся очень интересные эффекты. Например, при $bytes < 128 оба выражения (0x07FF & $bytes) == $bytes и (0x7F & $bytes) == $bytes будут верными, и тогда это уже просто рулетка получится.
        Ответить
        • Не будет. Слишком много (говно)кода посыпется.

          В динамических языках, допускающих выбор не по константам, этот оператор бессмысленен (разве что путать новичков).
          Ответить
  • фI,M!Y!X"G.O.L$G:I)R)M"G$J,AM GBE!Z"G"M)W?M$J A)O?I(S?I)R"S$B(R:M:H(V!AE(C)GVK?S?Y L!Q,T:X:E A,K.E:O:L(D?S,B"L,U:U(R!D,O,X?H"B$A!O?H:W?S?W"C.F"B"Q!N(Z,M$L.N F?J,N.P!T:K?L"H?Q:H!S!C!W?O?O,I)W(O P(G P?M"X?G)I)O"B"M E:Y,Z"N(E!E"Z$W$XW!X)O.A!LA:F)N,B"Q:U!E!Z!I!M R"J?D)Z K?F!MO L"S:O!A?H(S:W)L$E,S?Y?I"J(W(B$N$VWA)B,F"H:TS.J)B)Y B(D)L,YH.L D$Q E:V?X)F(B$U"R"QM.M:AY"Z"B,S.W"M,S?E)A:N,B!E$N(X$W(V)C(P$Y"C!O Y(E.V L:P"O,W)W K?TA"T(K"FX$N(C:Z:W)H)J(C:M?T:F,S,HH$L!D$G.G L!L?X.JV"I?V,EC$G:S)E.G D(SJ?AA:E$A?R:I!I(U?S.D(B F?T$PE!X"H"A.D!C(SS TH:NX?I"K?J?M:Z C$W"C(Z"F(FT$N"Z(Z,S Q(Y)F(Q:S L$T.N?O"W,G$Q)J$Q(S!C:G)U(W.P$O.E,WVL!H,D$SV.M.H"Q?I(A,C(L?H!CP$J(W?J.I"L!D$U$U?T(K WL"P,R(Z(O,T)T"OF I.D,F?K?X"F T!H)M)S(R?N.D!Z)P!S U!W!T"O)T"R.P(H"A$D,R$M(M(YT$REX!G!C,M!A:S I$M!I)K:E$U,T:W?O H"X?F,Y,P!E R?I!W OB,M(F$U(O?Y!L"X)M$I:Y"E.T?U"T$Z!R!Y$Q:G R!F$C!L(Z)X$G"WS.H(J)A.W?S E?T)B$W$WH,W!C$O!U?E,X.Q"B,S:I$C$AN!VL?Z!V:N$A,F,T$C?U$A)H.K.S:Y(P)WFR)V?QU E"G)C T:J)C(O N L RUK:G.X?L?W.P(K?TD$M.GB(E)M"T"Q(H)N!Z K)I,E(H:E?W$J:A:K:Q$P,G$Z$SS X!FA?I(R(F J)F:V"L$M,U.D)N:V.S T S?F.I.V"N:AA?K$I,DM!Q,L.V"B,B,O(B)S)N.N(V)S.E(H"Z(Z)C)U.Q)W$N!ED"U P$H!A"G.XI(W,K,V,V E.A(M,C$E)B$A$G.H(Q,OB)H?K R:I?R:W"L Y:D:J(C:K,F(DK,A"K$S)A?T?R Q,G,V.T:D)V"W!P,E!O?N)S"IO,Z:K.E$D:B?MLSЫZYUWMASJNVOPRDUUACZDIFWWHDOOROBCKISEQRXSGFFPIEPHVFFFNVWNC
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8