De ce WordPress inversează instrucțiunile condiționale?

5 ian. 2013, 01:40:24
Vizualizări: 611
Voturi: 7

În codul de bază al WordPress, deseori veți întâlni acest lucru:

if (1 == $someVar)

în loc de:

if ($someVar == 1)

Nu știu dacă prima metodă este un stil specific WordPress de programare, dar am observat-o doar în codul WP (fie el din nucleu sau cod de la terți).

20
Comentarii

Condiții Yoda acestea sunt.

fuxia fuxia
5 ian. 2013 01:44:51

Al doilea mod este mai ușor de citit; primul va ajuta la prevenirea erorii cu un singur =

shea shea
5 ian. 2013 01:50:01

Hmm... cum este asta off-topic? Am aflat ulterior din comentariile adăugate la întrebarea mea că este recomandat să codezi pentru WP folosind condiții Yoda conform [Codex] ( http://codex.wordpress.org/WordPress_Coding_Standards#Yoda_Conditions)

akTed akTed
5 ian. 2013 03:01:47

@AKTed Este off-topic pentru că nu este specific WordPress, este o întrebare despre PHP. Din FAQ: nu este specific WordPress (chiar dacă se întâmplă în contextul său)

Milo Milo
5 ian. 2013 03:28:21

@Milo: La început am crezut și eu asta, dar este specific WordPress în contextul că WordPress include acest lucru în Codex ca modul în care ei doresc să fie făcut. Se califică ca o întrebare despre PHP, dar întrebarea mea era specific despre observarea acestui lucru în codul WP foarte des.

akTed akTed
5 ian. 2013 04:56:20

@toscho & Milo: Întrebarea mea respectă [faq] în aceste două aspecte: 1. Se încadrează în secțiunea "WordPress - Stack Exchange este pentru dezvoltatorii și administratorii WordPress să pună întrebări despre:"... dezvoltare și cele mai bune practici de management 2. Deoarece WordPress enumeră condițiile Yoda în secțiunea Coding Standards din Codex ca metodă preferată de codare, nu se încadrează sub secțiunea faq "nu sunt specifice WordPress (chiar dacă apar în acest context)"

akTed akTed
5 ian. 2013 05:12:06

@AKTed Te rog folosește [meta] pentru a discuta despre domeniul nostru.

fuxia fuxia
5 ian. 2013 06:23:02

@toscho: Nu am suficiente puncte de Reputare pentru a întreba pe Meta. În plus, declarația ta "închis ca off topic..." îmi spune să las "comentarii..." chiar aici! Deși sunt sigur că este declarația standard StackExchange pentru închiderea acestei întrebări, practic tu o spui. Deci, care este soluția mea? Nu pot încă să folosesc WP Meta, iar se pare că nu ar trebui să discut aici (chiar dacă "tu" mi-ai spus să o fac!)?

akTed akTed
6 ian. 2013 06:20:15

@AKTed Ai nevoie de 5 puncte. Nu-mi spune că e prea mult. :)

fuxia fuxia
6 ian. 2013 06:23:11

Sunt atât de nou aici încât nu am încă punctele respective :(

akTed akTed
6 ian. 2013 06:23:45

Și pentru cine a dat vot negativ la întrebarea mea, de ce? Pentru că știai ceva ce eu nu știam? Dacă așa stau lucrurile, orice întrebare ar trebui să primească vot negativ. Meh, pierd timpul cu prostiile astea.

akTed akTed
6 ian. 2013 06:25:49

Uneori oamenii dau vot negativ dacă întrebarea nu este deosebit de utilă pentru site. Nu luați-o prea personal; nu este ca și cum ai avea reputație de pierdut ;)

shea shea
6 ian. 2013 06:30:41

@bungeshea Scuze, dar eticheta aceea nu este acolo pentru asta. De fapt, nici nu ar trebui să fie aici.

kaiser kaiser
6 ian. 2013 06:54:58

Această întrebare este pe topic deoarece se referă la standardele de codare documentate ale WordPress. Redeschisă și răspunsă ca atare.

EAMann EAMann
7 ian. 2013 18:38:49

Poftim, un titlu frumos, un răspuns la fel de bun, voturi pozitive, Calea Stack-ului ;)

brasofilo brasofilo
7 ian. 2013 18:51:39

@brasofilo Am avut impresia că "Calea Stack-ului" era ilustrată în acest fir de comentarii, cel puțin până când EAMann a oferit un Răspuns. :)

akTed akTed
7 ian. 2013 18:54:37

@EAMann Formatul ZIP este menționat și el în Codex, deci este pe subiect aici, nu?

fuxia fuxia
8 ian. 2013 02:16:07

@toscho Formatul ZIP în sine, nu. Dar întrebări despre comprimarea/decomprimarea din interiorul WordPress, da, potențial.

EAMann EAMann
8 ian. 2013 02:22:27

Bine, de obicei eu sunt Poliția Domeniului, și asta e prea pedant chiar și pentru mine. Aș spune că o întrebare care se potrivește atât de precis cu Standardele de Codare WordPress nu doar că este pe subiect pentru WPSE, dar oferă și o oportunitate excelentă de a explica mai în detaliu Standardul de Codare WordPress în cauză. Aceasta a fost o minge rapidă în centrul platoului; din fericire, @EAMann a recunoscut-o și a lovit cu putere.

Chip Bennett Chip Bennett
9 ian. 2013 01:43:16
Arată celelalte 15 comentarii
Toate răspunsurile la întrebare 1
1
12

Acest stil de codare este cunoscut sub numele de Yoda Condition și nu este specific WordPress. Am folosit același stil în C++, C# și chiar în codul JavaScript.

Principalul beneficiu al unei Yoda Condition este că preîntâmpină atribuirea accidentală a unei valori din cauza unei greșeli de tipar. Luați în considerare următoarea greșeală (deseori întâlnită):

if ( $some_variable = 1 ) {
    // ...
}

Aceasta va fi întotdeauna evaluată ca true, dar are și consecința suplimentară de a atribui valoarea 1 variabilei $some_variable. Uneori, acest lucru este intenționat. În WordPress, în special, veți vedea adesea lucruri precum:

if ( $post = some_function( $_POST['id'] ) ) {
    // ...
} else {
    // ...
}

Scopul acestui cod este să atribuie o nouă valoare variabilei $post, iar acest lucru funcționează deoarece funcția some_function() utilizată va returna false în caz de eroare.

Yoda Conditions (inversarea ordinii operatorului de egalitate ==) vă protejează de atribuirea accidentală a valorilor atunci când nu ați intenționat acest lucru. Dacă faceți o greșeală și introduceți doar un = în cod, veți primi o eroare deoarece nu puteți atribui către o valoare obișnuită:

if ( 1 = $some_variable ) {
    // ...
}

După cum am spus, acest lucru nu este unic WordPress sau chiar PHP, totuși face parte din standardele de codare WordPress obligatorii. Dacă scrieți un plugin sau o temă pentru distribuție generală sau contribuiți la nucleul WordPress, trebuie să știți atât ce sunt Yoda Conditions, cât și cum să le utilizați.

7 ian. 2013 18:38:07
Comentarii

Mulțumesc pentru un răspuns foarte descriptiv, apreciez foarte mult.

akTed akTed
7 ian. 2013 18:50:04