Kujiandaa kwa mahojiano ya PHP: neno kuu "static. Mitego ya vigezo vya tuli

08/07/2016 18:37 Mgeni: Bashibuzuk Alexander

Kubwa tu!
Viwanja, wahusika, mazungumzo...
Kila kitu kiko katika suti na rangi, bila kupotosha.
Imeandikwa vizuri sana. Inasimama kwa kasi dhidi ya historia ya molekuli ya sulfuri-maanguka.
Jambo pekee ni upakiaji wa aina na aina za silaha zisizo na maelezo sahihi kila wakati, lakini hii ni nadra sana.
Kipini pekee cha nywele ambacho ninaweza kumudu kwa dhati ni kutoka kwa "Mlango kutoka kwa Upande Mbaya" - kikosi cha Caracal (paka wa jangwani) IDF - kitengo tofauti (wanaume na wanawake) kwa shughuli za jangwani na hakina uhusiano wowote na Golani. brigade (nguvu ya kutua) . Kama ilivyo kwa wengine, kila kitu ni sawa kabisa.
Asante sana kwa vitabu
Ninataka sana kuona mwendelezo wa Feldkornet.
Asante tena!!!

07/10/2018 07:50 Mgeni: Bashibuzuk Alexander

V.I.P.: Wakati mmoja nilisoma Bashibazuk yote. Ingawa jina bandia ni la kujionyesha na la kijinga, kila kitu kinasomeka, haijalishi ni nani anasema nini. Kwa vyovyote vile, sikuona upuuzi wowote katika nilichosoma. Nilifurahi kwa mtu huyo. Kwa matumaini, nilifungua yake mpya zaidi, na kimantiki bora zaidi, "Kutoka kwa mlango wa nyuma" kwenye Flibust. Na kwa majuto nina hakika tena kwamba hakuna ukamilifu duniani. GG ni mfanyakazi wa NKVD (karibu GRU), ingawa yeye ni mhujumu (ingawa yeye ni mkuu kutoka wapi), lakini akiwa na elimu mbili maalum na hata alianza katika chuo kikuu cha kiraia. Na kisha kwa kila hatua hizi za bei nafuu, zote kwa wakati mmoja "tomba", zote kwa wakati mmoja "tomba", "tomba", "hariri", "tomba", "tomba wewe", "tomba wewe", "tomba", sawa , "mbweha wa Arctic" kwa ujumla ni kutoka wakati wetu. Hii ndio madarasa ngapi ya elimu hotuba kama hii itafikia na kwa nini iko hivyo. Sijui nini kitatokea baadaye, lakini tayari kuna hali inayoonekana ya ujinga, kutoka kwa njama ya "Poselyagin", kutoka kwa mtindo wa uwasilishaji, kutoka kwa hoja za kijinga na hitimisho la mhusika mkuu, kutoka kwa wahusika wa kadibodi, kutoka kwa mazungumzo yao yasiyo na uhai, kutoka kwa ukweli wa kile kinachotokea hata kwa hadithi za uwongo. Haya yote na mengine mengi hukufanya uhisi kichefuchefu na kukufanya utake kuacha kusoma. Kweli, sikuweza kuelewa, vizuri, nilitawanya "isiyoharibika", nikaisoma (au sikuisoma?), Je! ni kweli sio kuumiza macho yangu? Baada ya yote, kutupa haya yote kwa njia ya neno "fuck" (ndiyo sababu, kusisitiza ubinafsi, hivyo ni nini kuzimu, au labda baridi, nini?) Na hata maandishi rahisi yatasikika tofauti kabisa. Na ikiwa haikata, basi sijui, labda mtu mwingine aliiandika. Na ikiwa aliachiliwa, basi inaweza kuwa bora kuacha mateso ya kifasihi na kuacha kutesa ujinga wa kijinga.

07/23/2018 13:22 Mgeni: Bashibuzuk Alexander

V.I.P.: Kweli, pamoja na "kahaba" na kadhalika (labda bado ni mtu rahisi na mzuri), "unajua" Bush "unajua" na "ndio" ya kijinga zaidi ilionekana. Kwa neno, seti kamili. Na bado, ninaweza kuelewa kuwa kila mtu anataka kuwa na "mtu mkubwa" na kuwa na wanawake wengi mara moja, angalau katika "uumbaji" wao wenyewe, lakini ikiwa ni ya zamani na ya wizi, basi angalau angeleta kitu kipya ndani yake. uhusiano na mwisho, angeweza kukata rufaa kwa ponografia uliyotazama au kitu. Ingawa uhalisi unatoka wapi, yote pia yanategemea hali sawa.

Maombi

Katika vita dhidi ya mataifa ya Ulaya bashibazouki kawaida iligeuka kuwa haiwezekani kabisa. Haikuwezekana kuwapanga na kuwatia adabu, na hata juhudi za majenerali wa kigeni ambao walichukua hii (Mfaransa Jenerali Yusuf, Kiingereza Beatson) haikusaidia katika mwelekeo huu. Ili kukomesha uporaji wao nchini humo na ukatili na unyanyasaji usiofikirika dhidi ya raia, wanajeshi wa kawaida wa Uturuki walilazimika kuwapokonya silaha zaidi ya mara moja. bashi-bazouks. Walionyesha kikamilifu mielekeo yao ya uwindaji wakati wa kukandamiza Machafuko ya Aprili huko Bulgaria na wakati wa vita vya mwisho vya Urusi-Kituruki vya 1877-1878.

Sifa

Jina bashi-bazouks limekuwa neno la kaya kuelezea mtu anayeweza kufanya vurugu mbaya zaidi katika ukatili wake. Shughuli za adhabu bashi-bazouks ilivyoelezwa na mwanafalsafa wa Urusi V.S. Solovyov katika insha "Mazungumzo Tatu kuhusu Vita, Maendeleo na Mwisho wa Historia ya Ulimwengu," kulingana na nyenzo za maandishi.

Angalia pia

  • Pindari- nchini India
  • Serdyuki - katika Ukraine

Andika hakiki kuhusu kifungu "Bashi-bazouki"

Vidokezo

Fasihi

  • // Encyclopedia ya Kijeshi: [katika juzuu 18] / ed. V. F. Novitsky [na wengine]. - St. Petersburg. ; [M.]: Aina. t-va I.V. Sytin, 1911-1915.
  • // Kamusi ya Encyclopedic ya Brockhaus na Efron: katika juzuu 86 (juzuu 82 na 4 za ziada). - St. Petersburg. , 1890-1907.

Viungo

  • Montgomery, Viscount Bernard (1968). Historia ya Vita, Kampuni ya Uchapishaji ya Dunia. ISBN 978-0-688-01645-6.

Nukuu ya Bashibazuki

Kando ya vichochoro vya Khamovniki, wafungwa walitembea peke yao na msafara wao na mikokoteni na mabehewa ambayo yalikuwa ya walinzi na walikuwa wakiendesha nyuma yao; lakini, wakienda kwenye maduka ya usambazaji bidhaa, walijikuta katikati ya msafara mkubwa wa silaha wenye kusogea karibu sana, uliochanganywa na mikokoteni ya kibinafsi.
Kwenye daraja lenyewe, kila mtu alisimama, akingojea wale waliokuwa wakisafiri mbele wasonge mbele. Kutoka kwenye daraja hilo, wafungwa waliona safu zisizo na mwisho za misafara mingine ikisonga nyuma na mbele. Upande wa kulia, ambapo barabara ya Kaluga ilipinda nyuma ya Neskuchny, ikitoweka kwa mbali, ikanyoosha safu zisizo na mwisho za askari na misafara. Hawa walikuwa askari wa kikosi cha Beauharnais waliotoka kwanza; nyuma, kando ya tuta na kuvuka Daraja la Mawe, askari na misafara ya Ney ilitanda.
Vikosi vya Davout, ambavyo wafungwa ni wa, walipitia Ford ya Crimea na tayari walikuwa wameingia kwenye Mtaa wa Kaluzhskaya. Lakini misafara hiyo ilikuwa imenyooshwa sana hivi kwamba misafara ya mwisho ya Beauharnais ilikuwa bado haijaondoka Moscow kuelekea Kaluzhskaya Street, na mkuu wa askari wa Ney alikuwa tayari akiondoka Bolshaya Ordynka.
Baada ya kupita Ford ya Crimea, wafungwa walihamia hatua chache kwa wakati mmoja na kusimama, na kusonga tena, na pande zote wafanyakazi na watu wakawa na aibu zaidi na zaidi. Baada ya kutembea kwa zaidi ya saa moja hatua mia chache ambazo hutenganisha daraja kutoka kwa Kaluzhskaya Street, na kufikia mraba ambapo mitaa ya Zamoskvoretsky inakutana na Kaluzhskaya, wafungwa, waliopigwa kwenye lundo, walisimama na kusimama kwenye makutano haya kwa saa kadhaa. Kutoka pande zote mtu aliweza kusikia mngurumo usiokoma wa magurudumu, kukanyaga kwa miguu, na mayowe na laana zisizokoma, kama sauti ya bahari. Pierre alisimama akisukuma ukuta wa nyumba iliyochomwa, akisikiliza sauti hii, ambayo katika mawazo yake iliunganishwa na sauti za ngoma.
Maafisa kadhaa waliotekwa, ili kupata mtazamo mzuri, walipanda kwenye ukuta wa nyumba iliyochomwa karibu na ambayo Pierre alisimama.
- Kwa watu! Eka watu!.. Na walirundika bunduki! Angalia: furs ... - walisema. "Angalia, ninyi wanaharamu, waliniibia ... Ni nyuma yake, kwenye gari ... Baada ya yote, hii ni kutoka kwa icon, na Mungu! .. Hawa lazima wawe Wajerumani." Na mtu wetu, wallahi!.. Oh, walaghai! .. Tazama, amelemewa, anatembea kwa nguvu! Hapa wanakuja, droshky - na walimkamata! .. Tazama, aliketi kwenye vifua. Wababa!.. Tumepigana!..
- Basi mpige usoni, usoni! Hutaweza kusubiri hadi jioni. Angalia, angalia ... na hii labda ni Napoleon mwenyewe. Unaona, farasi gani! katika monograms na taji. Hii ni nyumba ya kukunja. Akaangusha begi na haoni. Walipigana tena ... Mwanamke mwenye mtoto, na sio mbaya hata kidogo. Ndiyo, bila shaka, watakuruhusu kupitia ... Angalia, hakuna mwisho. Wasichana wa Kirusi, kwa Mungu, wasichana! Wao ni vizuri katika strollers!
Tena, wimbi la udadisi wa jumla, karibu na kanisa la Khamovniki, liliwasukuma wafungwa wote kuelekea barabarani, na Pierre, shukrani kwa urefu wake, aliona juu ya vichwa vya wengine kile ambacho kilivutia udadisi wa wafungwa. Katika strollers tatu, mchanganyiko kati ya masanduku ya malipo, wanawake walipanda, kukaa karibu juu ya kila mmoja, wamevaa juu, katika rangi angavu, rouged, kupiga kelele kitu kwa sauti squeaky.

Ingawa nambari nyingi zilizopo za PHP 5 zinapaswa kufanya kazi bila mabadiliko, unapaswa kuzingatia mabadiliko yafuatayo ya nyuma yasiyoendana:

  • getrusage() anarudi NULL ilipopitishwa hoja zisizolingana kama za PHP 5.2.1.
  • ZipArchive::setCommentName() anarudi KWELI juu ya mafanikio kama ya PHP 5.2.1.
  • ZipArchive::setCommentIndex() anarudi KWELI juu ya mafanikio kama ya PHP 5.2.1.
  • SplFileObject::getFilename() inarudisha jina la faili, sio jamaa/njia/to/faili, kama ya PHP 5.2.1.
  • Kipaumbele kilichobadilishwa cha utofauti wa mazingira wa PHPRC kwenye Win32 Tofauti ya mazingira ya PHPRC sasa inachukua kipaumbele juu ya njia iliyohifadhiwa kwenye sajili ya Windows.
  • CLI SAPI haiangalii tena cwd kwa php.ini au faili ya php-cli.ini Katika PHP 5.1.x kipengele kisicho na hati kiliongezwa ambacho kilifanya binary ya CLI kuangalia saraka ya sasa ya kufanya kazi kwa faili ya usanidi wa PHP, ambayo inaweza kusababisha tabia isiyotabirika ikiwa faili ya usanidi isiyotarajiwa ingesomwa. Utendaji huu uliondolewa katika 5.2.0, na PHP haitatafuta tena CWD kwa uwepo wa faili za php.ini au php-cli.ini. Tazama pia sehemu ya mstari wa amri ya mwongozo.
  • Imeongeza onyo wakati wa kutekeleza shughuli za moduli 0 Katika matoleo ya awali ya PHP, kufanya integer % 0 hakutoa ujumbe wowote wa onyo, badala yake kurudisha thamani isiyotarajiwa ya kurudi. UONGO. Kufikia PHP 5.2.0, operesheni hii itatoa E_ONYO, kama ilivyo katika matukio mengine yote ambapo mgawanyiko kwa sifuri unafanywa.

    chapisha 10% 0;
    /* Onyo: Gawanya kwa sufuri katika jina la faili kwenye mstari n */
    ?>

  • Ilibadilishwa __toString() kuitwa popote inapohitajika. Njia ya kichawi __toString() sasa itaitwa katika muktadha wa kamba, ambayo ni, mahali popote kitu kinatumika kama kamba. Njia mbadala ya kurejesha mfuatano ulio na kitambulisho cha kitu ilidondoshwa katika PHP 5.2.0. Ilikua shida kwa sababu kitambulishi cha kitu hakiwezi kuchukuliwa kuwa cha kipekee. Mabadiliko haya yatamaanisha kuwa programu yako ina dosari ikiwa umeegemea kitambulisho cha kitu kama thamani ya kurudi. Jaribio la kutumia thamani hiyo kama mfuatano sasa litasababisha hitilafu mbaya inayoweza kupatikana.

    darasa foo()
    $foo = foo mpya ;
    chapisha $foo ;
    /* Hitilafu mbaya inayoweza kuambukizwa: Kitu cha darasa foo kinaweza
    haitabadilishwa kuwa kamba katika jina la faili kwenye mstari n */
    ?>

    Hata kwa __toString() , vitu haviwezi kutumika kama fahirisi za safu au funguo. Tunaweza kuongeza usaidizi wa ndani wa hashi kwa hili baadaye, lakini kufikia PHP 5.2.x utahitaji kutoa hashing yako mwenyewe au kutumia kitendakazi kipya cha SPL. spl_object_hash(). Vighairi haviwezi kutupwa kutoka kwa mbinu __toString().

    darasa foo (
    kazi ya umma __toString() (
    kutupa Ubaguzi mpya;
    }
    }

    jaribu (
    chapisha foo mpya;
    /* Hitilafu mbaya: Mbinu foo::__toString() lazima
    usitupe ubaguzi katika jina la faili kwenye mstari n */
    ) catch(Isipokuwa $e ) ()
    ?>

  • Utendakazi dhahania wa darasa tuli. Kwa sababu ya uangalizi, PHP 5.0.x na 5.1.x ziliruhusu utendakazi dhahania tuli katika madarasa. Kufikia PHP 5.2.x, violesura pekee vinaweza kuwa nazo.

    darasa la kufikirika foo {
    utendakazi wa tuli wa kufikirika
    bar ();
    /* Viwango Vikali: Utendakazi tuli foo::bar()
    haipaswi kuwa dhahania kwa jina la faili kwenye mstari n */
    }
    ?>

  • Ugani wa Oracle unahitaji angalau Oracle 10 kwenye Windows.
  • Imeongezwa RFC2397 ( data: mkondo) msaada. Utangulizi wa mpango wa URL wa "data" una uwezo wa kusababisha mabadiliko ya tabia chini ya Windows. Ikiwa unafanya kazi na mfumo wa faili wa NTFS na unatumia mitiririko ya meta kwenye programu yako, na ikiwa utatokea tu kuwa unatumia faili iliyo na jina "data:" inayopatikana bila habari yoyote ya njia - haitafanya kazi yoyote. zaidi. Marekebisho ni kutumia itifaki ya "faili:" wakati wa kuipata. Tazama pia » RFC 2397

    /* wakati allow_url_include IMEZIMWA (chaguo-msingi) */
    ni pamoja na "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
    /* Onyo: include(): Ufikiaji wa faili wa URL umezimwa
    katika usanidi wa seva katika jina la faili kwenye mstari n */
    ?>

  • Regression katika globu() mifumo Katika toleo la 5.2.4 urekebishaji wa usalama ulisababisha urejeshaji wa muundo wa fomu "/foo/*/bar/*". Tangu toleo la 5.2.5 badala ya kuongeza onyo globu() kazi itarudi UONGO lini openbase_dir vikwazo vinakiukwa.
  • Mafunzo

Sio siri kuwa watu wanapenda kuuliza maswali magumu wakati wa mahojiano. Si mara zote kutosha, si mara zote kuhusiana na ukweli, lakini ukweli unabakia ukweli - wanauliza. Bila shaka, swali ni tofauti, na wakati mwingine swali ambalo kwa mtazamo wa kwanza linaonekana kuwa la kijinga kwako kwa kweli linalenga kupima jinsi unavyojua vizuri lugha ambayo unaandika.

Wacha tujaribu kutenga moja ya maswali haya "kipande kwa kipande" - Neno "tuli" linamaanisha nini katika PHP na kwa nini linatumika?

Neno kuu tuli lina maana tatu tofauti katika PHP. Hebu tuyaangalie kwa mpangilio wa matukio, jinsi yalivyotokea katika lugha.

Thamani ya kwanza ni tofauti tuli ya ndani

kazi foo() ( $a = 0; echo $a; $a = $a + 1; ) foo(); // 0 foo(); // 0 foo(); // 0

Katika PHP, vigezo ni vya kawaida. Hii inamaanisha kuwa kigezo kilichobainishwa na kupewa thamani ndani ya chaguo za kukokotoa (mbinu) kinapatikana tu wakati wa utekelezaji wa chaguo hilo la kukokotoa (mbinu). Wakati njia inatoka, tofauti ya ndani inaharibiwa, na inapoingia tena, imeundwa upya. Katika nambari iliyo hapo juu, kigezo cha ndani kama hicho ni kitofauti cha $a - kinapatikana tu ndani ya foo() kitendakazi na huundwa upya kila wakati chaguo hili la kukokotoa linapoitwa. Kuongeza kutofautisha katika nambari hii haina maana, kwani kwenye safu inayofuata ya nambari kazi itamaliza kazi yake na thamani ya utaftaji itapotea. Haijalishi ni mara ngapi tunaita foo() kazi, itatoa kila wakati 0...

Walakini, kila kitu kinabadilika ikiwa tutaweka neno kuu la tuli kabla ya mgawo:

Kazi foo() ( tuli $a = 0; echo $a; $a = $a + 1; ) foo(); // 0 foo(); // 1 foo(); // 2

Neno la msingi tuli, lililoandikwa kabla ya kugawa thamani kwa utofauti wa ndani, lina athari zifuatazo:

  1. Kazi inafanywa mara moja tu, kwenye simu ya kwanza kwa kazi
  2. Thamani ya kigezo kilichowekwa alama kwa njia hii huhifadhiwa baada ya chaguo kukokotoa kuisha.
  3. Kwenye simu zinazofuata kwa chaguo la kukokotoa, badala ya mgawo, kigezo hupokea thamani iliyohifadhiwa hapo awali
Matumizi haya ya neno tuli yanaitwa tofauti tuli ya ndani.
Mitego ya vigezo vya tuli
Kwa kweli, kama kawaida katika PHP, kuna mitego fulani.

Jiwe la kwanza ni kwamba viunga tu au misemo ya mara kwa mara inaweza kupewa kutofautisha tuli. Hii hapa kanuni:
tuli $a = bar();
bila shaka itasababisha hitilafu ya kichanganuzi. Kwa bahati nzuri, kuanzia na toleo la 5.6, imewezekana kugawa sio tu viunga, lakini pia misemo ya mara kwa mara (kwa mfano, "1+2" ​​au ""), ambayo ni, misemo ambayo haitegemei nambari zingine na inaweza kuhesabiwa. katika hatua ya mkusanyiko

Jiwe la pili ni kwamba njia zipo katika nakala moja.
Hapa kila kitu ni ngumu zaidi. Ili kuelewa kiini, hapa kuna nambari:
darasa A ( kazi ya umma foo() ( tuli $x = 0; echo ++$x; ) ) $a1 = A mpya; $a2 = A mpya; $a1->foo(); // 1 $a2->foo(); // 2 $a1->foo(); // 3 $a2->foo(); // 4
Kinyume na matarajio angavu "vitu tofauti - mbinu tofauti," tunaona kwa uwazi katika mfano huu kwamba mbinu za mabadiliko katika PHP "hazizidishi." Hata kama tuna vitu mia moja vya darasa hili, mbinu itapatikana katika tukio moja tu; ni kwamba $this tofauti itatupwa ndani yake kwa kila simu.

Tabia hii inaweza kuwa isiyotarajiwa kwa msanidi programu ambaye hajajiandaa nayo na inaweza kuwa chanzo cha makosa. Ikumbukwe kwamba urithi wa darasa (na njia) husababisha kuundwa kwa njia mpya:

Daraja A ( utendakazi wa umma foo() ( tuli $x = 0; echo ++$x; ) ) darasa B huongeza A ( ) $a1 = A mpya; $ b1 = B mpya; $a1->foo(); // 1 $b1->foo(); // 1 $a1->foo(); // 2 $b1->foo(); // 2

Hitimisho: Njia za nguvu katika PHP zipo katika muktadha wa madarasa, sio vitu. Na tu katika muda wa utekelezaji uwekaji wa "$this = current_object" hutokea

Maana ya pili ni mali tuli na njia za madarasa

Katika mfano wa kitu cha PHP, inawezekana kuweka mali na mbinu sio tu kwa vitu - matukio ya darasa, lakini pia kwa darasa kwa ujumla. Neno kuu la tuli pia linatumika kwa hili:

Daraja A ( tuli ya umma $x = "foo"; mtihani wa utendaji wa tuli wa umma () ( return 42; ) ) echo A::$x; // "foo" echo A::test(); // 42
Ili kufikia sifa na mbinu kama hizo, miundo ya koloni mbili (“Paamayim Nekudotayim”) inatumika, kama vile CLASS_NAME::$Variablename na CLASS_NAME::Methodname().

Inakwenda bila kusema kwamba mali tuli na mbinu za tuli zina sifa zao wenyewe na mitego ambayo unahitaji kujua.

Kipengele cha kwanza ni banal - hakuna $this. Kwa kweli, hii inatokana na ufafanuzi hasa wa mbinu tuli - kwa kuwa inahusishwa na darasa, sio kitu, kigezo cha $this pseudo-variable, ambacho kinaelekeza kwa kitu cha sasa katika njia zinazobadilika, haipatikani. Ambayo ni mantiki kabisa.

Hata hivyo, unahitaji kujua kwamba, tofauti na lugha nyingine, PHP haioni hali "$hii imeandikwa kwa njia ya tuli" katika hatua ya uchanganuzi au ujumuishaji. Hitilafu kama hii inaweza kutokea tu wakati wa kukimbia ikiwa utajaribu kutekeleza nambari na $this ndani ya njia tuli.

Kanuni kama hii:
darasa A ( public $id = 42; kazi tuli ya umma foo() ( echo $this->id; ) )
haitasababisha makosa yoyote, mradi tu haujaribu kutumia foo() njia isivyofaa:
$a = A mpya; $a->foo(); (na mara moja pata "Kosa mbaya: Kutumia $this wakati sio katika muktadha wa kitu")

Kipengele cha pili ni kwamba tuli sio axiom!
darasa A ( kazi tuli ya umma foo() ( echo 42; ) ) $a = A mpya; $a->foo();
Hiyo ndiyo, ndiyo. Mbinu tuli, ikiwa haina $this katika msimbo, inaweza kuitwa katika muktadha unaobadilika, kama mbinu ya kitu. Hii sio mdudu katika PHP.

Kinyume chake sio kweli kabisa:
darasa A ( kazi ya umma foo() ( echo 42; ) ) A::foo();
Mbinu inayobadilika ambayo haitumii $this inaweza kutekelezwa katika muktadha tuli. Hata hivyo, utapokea onyo "Njia isiyo tuli A::foo() haipaswi kuitwa kitakwimu" katika kiwango cha E_STRICT. Ni juu yako kuamua ikiwa utafuata viwango vya msimbo kwa uangalifu au kukandamiza maonyo. Ya kwanza, bila shaka, ni vyema.

Na kwa njia, kila kitu kilichoandikwa hapo juu kinatumika tu kwa njia. Kutumia mali tuli kupitia "->" haiwezekani na husababisha kosa mbaya.

Maana ya tatu, ambayo inaonekana kuwa ngumu zaidi - kumfunga tuli marehemu

Waendelezaji wa lugha ya PHP hawakuacha kwa maana mbili za neno la msingi "tuli" na katika toleo la 5.3 waliongeza "kipengele" kingine cha lugha, ambacho kinatekelezwa kwa neno moja! Inaitwa "late static binding" au LSB (Late Static Binding).

Njia rahisi ya kuelewa kiini cha LSB ni kwa mifano rahisi:

Kielelezo cha Hatari ( tuli ya umma $table = "meza"; kazi ya kukokotoa ya umma getTable() ( return self::$table; ) ) echo Model::getTable(); // "meza"
Neno kuu la kibinafsi katika PHP daima linamaanisha "jina la darasa ambalo neno hili limeandikwa." Katika kesi hii, self inabadilishwa na darasa la Model, na self::$table na Model::$table.
Kipengele hiki cha lugha kinaitwa "early static binding". Kwa nini mapema? Kwa sababu kujifunga kwa kibinafsi na jina maalum la darasa halifanyiki wakati wa kukimbia, lakini katika hatua za awali - kuchanganua na kuunda msimbo. Kweli, "tuli" - kwa sababu tunazungumza juu ya mali tuli na njia.

Wacha tubadilishe nambari yetu kidogo:

Kielelezo cha Darasa ( tuli ya umma $table = "meza"; kitendakazi tuli cha umma getTable() ( return self::$table; ) ) darasa la Mtumiaji anapanua Mfano ( public tuli $table = "users"; ) echo User::getTable() ; // "meza"

Sasa unaelewa kwa nini PHP haifanyi kazi katika hali hii. self ilihusishwa na darasa la Model wakati hakuna kitu kilichojulikana kuhusu darasa la Mtumiaji, na kwa hivyo inaelekeza kwa Model.

Nifanye nini?

Ili kusuluhisha tatizo hili, utaratibu wa “kuchelewa” wa kumfunga ulivumbuliwa katika hatua ya utekelezaji. Inafanya kazi kwa urahisi sana - andika "tuli" badala ya neno "binafsi" na unganisho utaanzishwa na darasa linaloita nambari hii, na sio na ile iliyoandikwa:
class Model ( public tuli $table = "table"; public static function getTable() ( return static::$table; ) ) darasa Mtumiaji anapanua Model ( public tuli $table = "users"; ) echo User::getTable() ; // "watumiaji"

Hii ni siri ya "kumfunga tuli kuchelewa".

Ikumbukwe kwamba kwa urahisi zaidi, katika PHP, pamoja na neno "tuli", pia kuna kazi maalum get_called_class(), ambayo itakuambia katika muktadha wa darasa ambalo msimbo wako unafanya kazi kwa sasa.

Mahojiano yenye furaha!