PHP'de koşullu if ifadesi. Makine kodlarında ve montaj dilinde programlama Koşulsuz albüm php

  • 03.11.2019

Programın sıralı yürütülmesinden uzaklaşmak ve bir bloğun yürütülmesini başka bir yerden başlatmak için atlamalara ihtiyaç vardır. Bu komutlar büyük ölçüde BASIC GO TO komutlarına eşdeğerdir.

Geçişler:

koşullu ve koşulsuz;

göreceli ve mutlak.

koşullu herhangi bir koşulun karşılanıp karşılanmadığına bağlı olarak geçiş yürütülür (veya yürütülmez). Benzer bir TEMEL yapı şuna benzer:

EĞER ......... SONRA GİT ...........

Şartsız geçiş, programda her gerçekleştiğinde yürütülür. Hiçbir koşula bağlı değildir.

mutlak atlama verilen adrese yapılır. Adres (çift bayt) işlem kodundan sonra belirtilir.

Akraba atlama, atlama talimatını takip eden talimatı içeren adresten birkaç adım ileri veya geri gerçekleştirilir. Burada olası geçişlerin aralığı sınırlıdır. -128 ile +127 bayt arasında değişebilir ve ofset olarak adlandırılır. Bir baytlık ofset değeri s işlem kodundan sonra belirtilir. Her zaman ikinin tamamlayıcısı biçiminde verilir.

Mutlak atlama komutu anımsatıcıları her zaman ile başlar JP(atlama - atlama) ve göreli geçiş - ile JR(göreceli atlama - atlama görecelidir).

Bu grupta 17 takım var ve onları dört alt grupta ele alacağız.

5.9.1. Mutlak koşulsuz dal komutları.

anımsatıcılar

kod

anımsatıcılar

kod

JPnn

C3 n n

JP (HL)

JP(IX)

GG E9

JP(IY)

FD-E9

Takım JPnn iki bayt tarafından verilen adrese atlamaya neden olur nn. Bu adres otomatik olarak program sayacına yüklenir (kayıt çifti bilgisayar) ve program bu adresten devam eder.

Takımlar JP (HL), JP(IX), JP(IY) dolaylı adresleme kullanın. Yani, örneğin, komuta JP (HL) HL kayıt çiftinde bulunan adrese atlayın.

5.9.2. Göreceli koşulsuz atlama.

Bu alt grupta yalnızca bir komut vardır: JRs, kodu 18'dir ve ardından ofset değeri gelir s-128 ile +127 arası, ikinin tümleyeni şeklinde verilir. Bu formda, örneğin FE'nin (254) 254 bayt ileri atlama değil, 2 bayt geri atlama, yani. (-2).

Göreceli geçişin bir başka özelliği de ileri veya geri geçişin nereden başladığıdır. Unutmayın, komutun bulunduğu adresten sayılmaz JR, ancak onu takip eden işlem kodunun bulunduğu koddan, çünkü takım tanıştığında JR, sayacı programlamak için bilgisayar sonraki komutun başlangıcının adresi zaten gönderildi ve geri sayım ondan başlıyor. Örneğin:

anımsatıcılar

Adres (aralık)

Yorum

LD A, FF

255 sayısını akümülatöre yükleyin

Aralık A

A'yı 1 azalt

JR FD

Üç bayt geri atla

NOP

Göreceli atlamaların kullanımı, hem yazılı hem de çalışan programlarda mutlak atlamalara göre bir dizi değerli avantaj sağlar. Yukarıdaki örnekte adreslere referans olmadığına dikkat edin. 60000 adresinden başlayarak yerleştirdik, ancak başka bir yere yerleştirilirse, tamamen aynı şekilde çalışacak ve aynı eylemleri gerçekleştirecektir.

Mutlak atlamaların olmaması, alt programı yeniden yerleştirilebilir (hareketli) yapar. İçinde mutlak geçişler varsa dönmez hale gelir. Doğru, çoğaltılmış bir prosedürün programın diğer bölümlerinden kendisine çağrı yapılmasına izin vermeyebileceğini (bkz. 5.12) veya böyle bir çağrıdan önce bu prosedürün yerinin belirtilmesi gerektiğini unutmamalıyız. Prosedürün yerini gösteren özel bir program değişkeni atanabilir.

Yeniden yerleştirilebilirlik, yazarken, prosedürün nerede bulunacağı sorusu hakkında düşünmek zorunda olmadığınız için uygundur. Ve çalışma sırasında, diğer ortama bağlı olarak, o anda sizin için uygun olan bellek alanlarını buna tahsis edebileceksiniz [not 5].

5.9.3. Mutlak koşullu dal komutları.

Bu komutlar, herhangi bir koşul karşılandığında verilen adrese atlar. Z-80 komut setinde, bu durum kayıt bayraklarının durumu ile ilişkilidir. F, yani: taşıma bayrağı ( C), sıfır bayrak ( Z), işaret bayrağı ( S) ve taşma/eşlik bayrağı ( P/V).

anımsatıcılar

Yorum

J.P.C,nn

DA n n

Taşıma bayrağı açık ise verilen adrese atlama işlemi yapılır.

JP NC,nn

D2 nn

Taşıma bayrağı temizlenmişse verilen adrese atlama işlemi gerçekleştirilir.

J.P.Z,nn

CA nn

Sıfır bayrağı açıksa verilen adrese atlama yapılır.

jr nz,nn

C2 nn

Sıfır bayrağı temizlenmişse verilen adrese atlama işlemi gerçekleştirilir.

j.r.p.,nn

F2 nn

İşaret bayrağı açıksa verilen adrese atlama yapılır.

JR M,nn

FA nn

İşaret bayrağı temizlenmişse, verilen adrese bir atlama gerçekleştirilir.

J.P.O.,nn

E2 nn

Tek sayıda bit varsa veya taşma yoksa verilen adrese bir atlama gerçekleştirilir.

JP PE,nn

EA nn

Çift sayıda bit varsa veya bir taşma varsa, verilen adrese bir dal yürütülür.

5.9.4. Göreceli koşullu dal komutları.

Bu komutlar, bayrakların durumuna bağlı olarak belirli bir bayt sayısı kadar ileri veya geri atlar. C ve Z.

anımsatıcılar

Yorum

JR C,s

38 s

git s bayt ise bayrak C dahil.

JR NC,s

30 s

git s bayt ise bayrak

C Sıfırla.

Jr Z,s

28 s

git s bayt ise bayrak Z dahil.

jr nz,s

20 s

git s bayt ise bayrak Z Sıfırla.

5.9.5. Bayraklarla çalışma hakkında yorumlar.

Bayrak taşımak (İTİBAREN). Bu bayrak, kaydın sıfır bitindedir. F. Akümülatörün mutlak ikili aritmetikte taşma olup olmadığını gösterir (yani, toplama sonucunun 255'ten büyük olup olmadığını veya çıkarma sonucunun 0'dan küçük olup olmadığını). Tüm komutlar bu bayrağın durumunu etkilemez. Komutların çeşitli bayraklar üzerindeki etkisini "Referans" tablomuza göre belirleyebilirsiniz.

Kısaca:

1) Tüm toplama, çıkarma ve karşılaştırma komutları EKLE, ADC,ALT, SBC, KP taşıma bayrağını etkiler. Karşılaştırma sırasında toplamada taşma, çıkarmada ödünç alma veya işlenenin içeriği akümülatörün içeriğinden büyükse açılır.

2) Tüm mantık komutları VE, VEYA, XOR taşıma bayrağını sıfırlayın.

3) Shift komutları (bkz. bölüm 5.14.) taşıma bayrağını etkiler.

Sıfır Bayrak (Z). Bu bayrak, kaydın altıncı bitinde F. Bir önceki işlemin sonucu sıfır ise yanar, aksi takdirde kapanır.

Anımsatıcı çelişkiye dikkat edin. Sıfır bayrağı açık ve sıfıra eşit değil operasyon sonucu ne zaman sıfır.

1) Tek kayıtlarla çalışırken, sıfır bayrağı toplama işlemlerinin sonuçlarından etkilenir ( EKLE, ADC, INC), çıkarma ( ALT, SBC, Aralık), karşılaştırmalar ( KP), hem de mantık ( VE, VEYA, XOR).

2) Bir kayıt çifti ile çalışırken, sıfır bayrağını yalnızca aritmetik işlemler etkiler ADC ve SBC.

3) Kayıtları yükleme komutları LD Spectrum için çok nadir olan komutlar dışında sıfır bayrağını etkilemez LD A,I; LD A,R.

4) Sıfır bayrağı, biraz sonra öğreneceğimiz komutlardan da etkilenir: shift komutları (Sec.5.14.); bit kontrol komutları (5.15.); blok arama komutları (5.16.).

işaret bayrağı (S). Bu bayrak, kaydın yüksek (yedinci) bitindedir. F. Sonuç negatifse yanar, pozitifse resetlenir.

İlginç bir şekilde, ek ikili aritmetikte gerçekleştirilen işlemler için, içeriğin işaretini de belirleyen akümülatörün en önemli (yedinci) bitine eşittir.

Ana Özellikler:

1) Tek kayıtlarla çalışırken, işaret bayrağı ekleme işlemlerinin sonuçlarından etkilenir ( EKLE, ADC, INC), çıkarma ( ALT, SBC, Aralık), karşılaştırmalar ( KP), hem de mantık ( VE, VEYA, XOR).

2) Bir kayıt çifti ile çalışırken, işaret bayrağı sadece işlemlerden etkilenir. ADC ve SBC.

3) Kayıtları yükleme komutları LD komutlar dışında işaret bayrağını etkilemez LD A, ben; LD A,R.

4) İşaret bayrağı, biraz sonra öğreneceğimiz komutlardan da etkilenir: shift komutları (Sec. 5.14.); blok arama komutları (5.15.).

Taşma/Eşit Bayrak (P/V). Bu bayrak F kaydının ikinci bitindedir. İki amacı vardır. Bazı komutlar için, dahil edilen bit sayısında bir paritenin varlığını gösterir, diğerleri için, işlem sonucunda ek ikili aritmetikte bir taşmanın varlığını gösterir.

Açıklama: Buradaki eşlik kavramı, akümülatördeki sayıyı değil, içerdiği bitlerin sayısını ifade eder. Örneğin, 33 (0011 0011) sayısının dört biti vardır ve bu nedenle bayrak açıktır, 34 (0011 0100) sayısının üç biti vardır ve bayrak kapalıdır.

Buradaki "taşma" terimi, tamamlayıcı ikili aritmetiği ifade eder. Toplama işleminin bir sonucu olarak, 00 ... 7F aralığındaki bir sayıdan 80 ... FF aralığındaki bir sayıya bir geçiş olursa veya çıkarma sırasında bunun tersi olursa bayrak açılır. Tek kelimeyle, tamamlayıcı ikili aritmetik kurallarına göre, hangi yönde olursa olsun, akümülatörün içeriğinin işaretinde bir değişiklik olursa yanar.

Bu bayrağı hangi işlemlerin çift parite bayrağı olarak etkilediğini, hangilerinin taşma bayrağı olarak etkilediğini ve hangilerinin hiç etkilemediğini tam olarak belirleyebilir, “Referans…” tablolarımızı kullanabilirsiniz.

5.10. Bir döngüdeki işlemler

Programlarda çok sık olarak bazı hesaplama bloklarını tekrarlamak gerekir. n bir Zamanlar. BASIC'te döngü operatörü bu amaç için kullanılır:

İÇİN i= 1 İÇİN n

..............

SONRAKİ i

FOR ve NEXT ifadeleri arasındaki her şey tekrarlanacak n bir Zamanlar. Bu durumda parametre i döngü parametresi olarak adlandırılan , her geçişte bir artacak ve ulaştığında n, döngü yürütmesi kesintiye uğrayacak ve program NEXT'i izleyen ifadeden devam edecektir.

Makine kodunda, güçlü bir komut bu amaca hizmet eder. DJNZ s. Bu talimat, işlemcinin B kaydına aittir. İşlemci bu komutla karşılaştığında, B registerını birer birer azaltır, sıfır olup olmadığını kontrol eder ve eğer sıfıra ulaşılırsa, atlar. s bayt. Ofset tutarı s ikili tamamlayıcı biçimde verilir ve geçiş ileri veya geri olabilir, ancak daha sık olarak elbette geriye doğru olabilir. Hesaplar, B kaydında 0'a ulaşılana kadar tekrarlanır.

anımsatıcı - DJNZs; Kod - 10 s.

Bunu bir örnekle açıklayalım.

İşlemci bir talimatla karşılaştığında bunu zaten biliyorsunuz. NOP, hiçbir şey yapmaz, yani. sadece duraklat. Süresi 4 saat döngüsüdür. Döngünün süresi, bilgisayarınızın ana kristalinin frekansına bağlıdır ve makineden makineye biraz değişebilir. Ancak, yaklaşık 3.5 MHz olduğundan, bir döngünün süresi bir mikrosaniyenin kesirleridir. Diyelim ki işlemcinin yaklaşık 200 saat döngüsü için duraklamasını istiyorsunuz. Elbette arka arkaya 50 komut koyabilirsiniz NOP, ancak bu çok kaba ve ayrıca boş RAM miktarına çok fazla zarar veriyor.

Bir hesaplama döngüsü düzenleme ve komutun tekrar tekrar tekrarlanma olasılığını kullanacağız. NOP. "El Kitabı ..." tablolarına göre komut yürütme süresinin DJNZ kayıt varsa 13 saat döngüsü sürer S 0 değil ve 0 ise 8 döngü.

Toplamda, duraklamanın yaklaşık 200 döngü sürmesi için komutu tekrarlamanız gerekir. NOP 12 kez:

12*4 + 11*13 + 1*8 = 48 + 143 + 8 = 199

Ardından prosedür şöyle görünecektir:

anımsatıcılar

Yorum

NOP

DJNZ 253

Kayıt içeriğini azalt B birim başına

ve 3 bayt geri atlayın.

5.11. Yığın Komutları

Bu talimatlar, programcının kayıt çiftlerinin içeriğini yığına kopyalamasına ve tersine onları oradan işlemciye çağırmasına izin verir. Böylece, aynı anda iki bayt gönderilir, yani. iki baytlık bir sayı (genellikle bir adres, ancak her zaman değil). Ayrıca aynı grupta bazı işlemci kayıtlarının içeriklerini değiştirmenize izin veren komutlar vardır.

Bu gruptaki üç komut alt grubunu düşünün.

5.11.1. Yığında veri depolamak için komutlar.

Bu komutlar bir anımsatıcı ile başlar İTMEK, biraz anlamsız Rus eşdeğeri “itme” (uzak kutuya) için uygundur. Bu nedenle, daha fazla ihtiyaç duyulana kadar kayıt çiftlerinin içeriğini geçici olarak kaydetmek gerektiğinde kullanılırlar.

anımsatıcılar

kod

anımsatıcılar

kod

PUSH AF

BASIN HL

PUSH BC

TUŞ DE

PUSH IX

GG E5

PUSH II

FD-E5

İlk olarak, yüksek bayt yığına itilir ve ardından düşük bayt. PUSH işleminden sonra yığın işaretçisi (kayıt SP) iki birim azalır. Yığın yukarıdan aşağıya "büyüdüğü" için azalır. Bunun hakkında zaten konuştuk.

5.11.2. Yığından veri çağırma komutları.

Bu komutlar, yığından veri çıkarmak ve gerekli kayıt defterine yüklemek için kullanılır. Yığın üzerindeki verilerin herhangi bir register'a bağlı olmadığı vurgulanmalıdır. Hangi kayıttan indirildiklerine bakılmaksızın, başka bir kayıt defterine yüklenebilirler ve genellikle bu verilerin hangi kayıttan boşaltıldığını bulmanın fiziksel bir yolu yoktur. Eğer önemliyse, programcının kendisi bununla ilgilenmelidir.

Yığından veri çağıran talimatların anımsatıcısı şu sözcükle başlar: POP("dışarı itmek").

anımsatıcılar

kod

anımsatıcılar

kod

POP AF

POP HL

POP M.Ö.

POP DE

POP IX

GG E1

POP IY

FD-E1

5.11.3. Takımlardeğiş tokuşortakyığın.

Bu komutlardan üç tane var. Anımsatıcılarla başlarlar ESKİ(değişim - değiş tokuş) ve kayıt çiftinin içeriğini yığına göndermeye ve yığının en üstündeki içeriği bu kayıt çiftine göndermeye hizmet eder. Aynısı, geçici bir depolama yeri olarak başka bir kayıt kullanılarak yapılabilir, ancak değişim talimatlarının kullanılması bunu kolaylaştırır.

anımsatıcılar

kod

ÖRN(SP),HL

ÖR(SP),IX

GG E3

ÖR (SP), İY

FD-E3

5.11.4. Yığın işlemleriyle ilgili notlar.

İşlemci yığını, makine yığınıdır. BASIC'te çalışırken düzenlenen ve alt programın çağrıldığı satır numarasını hatırlamaya yarayan GO SUB yığını ile karıştırılmamalıdır.Ayrıca hesap yığını ile karıştırılmamalıdır. "Spectrum", ROM'a yerleştirilen prosedürlerle kontrol edilen ve makine kodlarında programlama yaparken kullanılabilen bir hesap makinesine sahiptir. Bölüm 5.13'te bunu oldukça derinden öğreneceğiz.

Makine yığını, programcının verileri geçici olarak depolaması için uygun bir yer sağlamaktan daha fazlasını sağlar. Ana amacı, alt programların çağrıldığı adresleri saklamaktır. Bu, alt programın sonunda işlemcinin hesaplamalara devam etmek için nereye dönmesi gerektiğini bilmesi için gereklidir. Bu bakımdan, yığınla çalışırken sizden biraz özen gösterilmesi gerekiyor.

Bir alt programdaysanız, yığına koyduğunuz her şey, alt program çağıran programdan çıkmadan önce çıkarılmalıdır. Öte yandan çıkış, stack'in en üst kısmındaki iki byte'da bulunan adresten yapıldığından, stack'in en üstünde yer alan sayıları manipüle ederek programın mantığını ustaca kontrol edebilirsiniz, özellikle bu programlardaki karmaşık hesaplamaların nasıl düzenlendiği.

5.12. alt program çağrısı

BASIC'de GO SUB deyimi ile alt programlar çağrılır ve RETURN komutu ile bir alt program çalıştırıldıktan sonra geri dönüş yapılırdı.

Makine kodunda, komutlara eşdeğerdirler. ARAMAK- "meydan okuma" ve RET- "dönüş".


5.12.1. Çağrı komutları.

Çağrı koşulsuz olabilir veya kayıt bayraklarının durumunun kontrol edilmesiyle ilgili bazı koşullar eşlik edebilir. F. Toplamda alt programları çağırmak için 9 komut vardır.

anımsatıcılar

Belirli koşullar oluştuğunda bir döngüyü erken sonlandırabilmek genellikle uygundur. break ifadesi böyle bir fırsat sağlar. Şu yapılarla çalışır: while, do while, for, foreach veya switch .

break ifadesi, kendisine kaç tane iç içe yapının sonlandırılacağını söyleyen isteğe bağlı bir sayısal argüman alabilir. Sayısal bağımsız değişkenin varsayılan değeri, geçerli döngüyü sonlandıran 1'dir. Döngüde switch ifadesi kullanılıyorsa, break/break 1 yalnızca switch ifadesinden çıkar.

\n"; break 1; /* Yalnızca switch ifadesinden çıkın. */ case 10: echo "Yineleme 10; Ayrılıyoruz
\n"; break 2; /* switch ifadesinden ve while döngüsünden çıkın. */ ) ) // ($bar1 = -4; $bar1 için başka bir örnek)< 7; $bar1++) { // проверка деления на ноль if ($bar1 == 0) { echo "Выполнение остановлено: деление на ноль невозможно."; break; } echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Tabii ki, bazen döngüyü tamamen bitirmek yerine döngünün yinelemelerinden birini atlamayı tercih edersiniz, bu durumda bu devam ifadesi ile yapılır.

devam et

Döngü gövdesindeki mevcut kod bloğunu işlemeyi durdurmak ve bir sonraki yinelemeye geçmek için devam deyimini kullanabilirsiniz. Döngüyü durdurmaması, ancak bir sonraki yinelemeye atlaması bakımından break ifadesinden farklıdır.

Devam ifadesi, break gibi, yinelemenin geri kalanının kaç tane iç içe döngü düzeyinin atlanacağını belirten isteğe bağlı bir sayısal argüman alabilir. Sayısal bağımsız değişkenin varsayılan değeri 1'dir ve yalnızca geçerli döngünün geri kalanını atlar.

"; devam et; ) echo "50/$bar1 = ",50/$bar1"
"; } ?>

Döngü sırasında $counter değişkeninin sıfır değerinin atlandığını, ancak döngünün sonraki değerle devam ettiğini unutmayın.

git

goto koşulsuz bir şube operatörüdür. Program kodunun başka bir bölümüne atlamak için kullanılır. Programda gitmek istediğiniz yer bir etiket (basit bir tanımlayıcı) ve ardından iki nokta üst üste kullanılarak belirtilir. Atlamak için, goto ifadesinden sonra istenen etiket yerleştirilir.

goto ifadesini kullanmanın basit bir örneği:

goto deyiminin bazı kullanım kısıtlamaları vardır. Hedef etiket aynı dosyada ve aynı bağlamda olmalıdır; bu, bir işlevin veya yöntemin dışına çıkamayacağınız veya bunlardan birinin içine giremeyeceğiniz anlamına gelir. Ayrıca herhangi bir döngü veya switch ifadesinin içine atlayamazsınız. Ancak bu yapılardan (döngülerden ve switch ifadesinden) çıkmak için kullanılabilir. Genellikle çok seviyeli break yerine goto ifadesi kullanılır.

"; ) echo "döngüden sonra - etiketten önce"; // komut yürütülmez end: echo "Etiketten sonra"; ?>

). Her etiket (bölüm) bir çift olmalı (/ bölüm). Gerekli parametreler isim ve döngü. Döngü adı (bölüm) harflerden, rakamlardan ve alt çizgilerden oluşan herhangi bir şey olabilir. döngüler (bölüm) yuvalanabilir ve yuvalanmış (bölüm) adlar kendi aralarında benzersiz olmalıdır. Değişken döngü(genellikle bir değerler dizisi) döngünün yineleme sayısını belirtir. Bir bölümün içindeki değişkenleri yazdırırken, bölüm adı köşeli parantez içinde değişken adının yanında görünmelidir. (bölüm başka) parametre çalıştırılırsa döngü hiçbir değer içermez.

Özellik adı Bir çeşit Zorunlu Varsayılan Tanım
isim sicim Evet n/a Bölüm adı
döngü karışık Evet n/a Döngünün yineleme sayısını belirten bir değer.
Başlat tam sayı Değil 0 Döngünün başlayacağı konumun dizini. Değer negatifse, başlangıç ​​konumu dizinin sonundan hesaplanır. Örneğin, döngü değişkeni 7 elemana sahipse ve başlangıç ​​özniteliğinin değeri -2 ise, başlangıç ​​dizini 5 olur. Geçersiz değerler (dizi dışındaki değerler) otomatik olarak en yakın geçerli değere kısaltılır.
adım tam sayı Değil 1 Dizide yineleme yapmak için kullanılan adım değeri. Örneğin, adım=2, diziyi 0,2,4... öğeleriyle çaprazlamayı belirtir... Adım negatifse, dizi ters yönde geçilir.
maksimum tam sayı Değil 1 Maksimum döngü yineleme sayısı.
göstermek boole Değil doğru Bu bölümün gösterilip gösterilmeyeceğini belirtir

Not

Smarty 1.5.0'dan bu yana, oturum özelliği değişkeni sözdizimi (%sectionname.varname%) iken ($smarty.section.sectionname.varname) olarak değiştirilmiştir. Eski sözdizimi hala desteklenmektedir, ancak yalnızca yeni sözdiziminin örneklerini göreceksiniz.

index , sıfırdan başlayarak (veya belirtilmişse başlangıç ​​niteliği) ve bir artırarak (veya belirtilmişse adım niteliğinin değeri) dizinin geçerli indeksini görüntülemek için kullanılır.

Teknik not

Adım ve başlangıç ​​öznitelikleri belirtilmemişse, dizin 1 yerine 0'dan başlaması dışında yineleme bölümü özniteliği ile aynıdır.

yineleme, döngünün geçerli yineleme numarasını görüntülemek için kullanılır.

Not

Bu değer, index özelliğinden farklı olarak start, step ve max özelliklerinden bağımsızdır. Ayrıca, yinelemeler, dizinlerin yaptığı gibi sıfırdan değil, bir ile başlar. rownum, yineleme özelliğinin eş anlamlısıdır, aynı şekilde çalışırlar.

Örnek 7.38. özellik (bölüm) yineleme

assign("kişi",$kimlik); ?> (bölüm adı=cu loop=$custid başlangıç=5 adım=2) yineleme=($smarty.section.cu.iteration) index=($smarty.section.cu.index) id=($custid)
(/ bölüm)

Bu örneği çalıştırmanın sonucu:

Yineleme=1 dizin=5 id=3005
yineleme=2 dizin=7 id=3007
yineleme=3 dizin=9 id=3009
yineleme=4 dizin=11 id=3011
yineleme=5 dizin=13 id=3013
yineleme=6 dizin=15 id=3015

Bu örnek, her beş satırda bir tablo başlığını görüntülemek için yineleme özelliğini kullanır (bir mod operatörü - modulo ile (if) kullanır).

(bölüm adı=co loop=$contacts) (eğer $smarty.section.co.iteration % 5 == 1) (/eğer) (/ bölüm)
Ad>EvhücreE-posta
görüş ($kişiler.adı) ($contacts.home) ($kişiler.hücre) ($contacts.e-posta)


Değişken $GLOBALS. Şu anda tanımlanmış tüm komut dosyası global kapsam değişkenlerine başvuruları içeren bir ilişkisel dizi (dizi). Değişken isimleri dizi anahtarlarıdır.

Global bir değişken bildirmek için onu $GLOBALS dizisine yerleştirmek yeterlidir.

$GLOBALS["testkey2"]="testdeğer2";

$GLOBALS dizi değişkenlerinin tüm değerlerini print_r($GLOBALS) kullanarak ekrana yazdırabilirsiniz; veya bunun gibi:

Foreach ($anahtar=>$değer olarak $GLOBALS) echo "GLOBALS[".$anahtar."] == ".$değer."
";

$_SERVER değişkeni.

    $_REQUEST değişkeni- varsayılan olarak $_GET, $_POST ve $_COOKIE değişkenlerinin verilerini içeren bir ilişkisel dizi (dizi). $_REQUEST dizisindeki değişkenler komut dosyasına GET, POST veya COOKIE yöntemleri aracılığıyla iletilir, bu nedenle güvenilir olamazlar çünkü bunlar uzak bir kullanıcı tarafından değiştirilmiş olabilir. Bunların mevcudiyeti ve ilgili dizilere veri ekleme sırası değişkenler_sıralama yönergesi tarafından belirlenir (varsayılan olarak GPCS ayarlanır).

    $_SESSION değişkeni

    $_ENV değişkeni. Komut dosyası komut satırından çalıştırıldıysa doldurulur. $_SERVER dizisi, $_ENV dizisindeki tüm değişkenleri içerecektir.

    Değişken $http_response_header

Diğer programlama dilleri gibi PHP'de de seçme ifadeleri vardır. Toplamda üç tür vardır:

  • koşullu ifade if...else ;
  • anahtar ;
  • koşullu işlem (?);

PHP'de goto etiketinde koşulsuz atlama olmadığını belirtmekte fayda var, ancak buna rağmen goto anahtar sözcüğü saklıdır.

Bu dersimizde if...else koşul deyimi ve koşullu işlemlere bakacağız ve bir sonraki ders switch'e odaklanacağız.

if...else sözdizimi C'dekiyle aynıdır:

// uslovie doğruysa, o zaman buraya geliriz operatör1; // bir operatör olması durumunda, operatör2; ...) başka // isteğe bağlı {// uslovie yanlışsa, o zaman buraya geliriz operatör3; // bir operatör olması durumunda, operatör4; // küme parantezleri isteğe bağlıdır ... } ?>

Notlar:

  • else - isteğe bağlı kısım, ancak çoğu zaman kullanılır, çünkü mantık bunu gerektirir.
  • Kodun yorumlarında belirtildiği gibi, yalnızca bir operatörümüz varsa kaşlı ayraçlar () gerekli değildir. Koşul doğru (1) veya yanlış (0) olabileceğinden, operatör1, operatör2, vb. veya operatör3, operatör4, vb. yürütülecektir.

İşte PHP'de somut bir örnek:

//Değişken değerlerinin ayarlanması$sayı1 = 10; $sayı2 = 7; if ($sayı1 > $sayı2) ( // koşul doğru, yani buraya geliyoruz echo "Koşul doğrudur çünkü 10 > 7
"; $sayı1+=$sayı2; // $sayı1'e $sayı2 değişkeni ekleyin; yankı "\$num1 = ". $sayı1; // sonuç 17 olacak) else echo "Koşul pozitif olduğu için buraya ulaşamıyoruz"; // else'de sadece bir else ifadesi vardır, dolayısıyla kaşlı ayraç yoktur ?>

Burada, else yapısının atlandığı ve koşulun iki koşuldan oluştuğu bir örnek verilmiştir:

6) echo "Koşullar doğru"; //Başka bir örnek: if ($num1 == 10 || $num2 >= 100) echo "Koşullar doğru"; //Koşullar her durumda doğrudur ?>

İç içe eğer koşullar

C gibi, PHP iç içe koşullara izin verir:

// uslovie1 ve uslovie2 doğruysa buraya gidin) başka ( // uslovie1 doğruysa ve uslovie2 yanlışsa, o zaman buraya geliriz) başka ( // uslovie1 ve uslovie2 yanlışsa, buraya gelin } ?>

İstediğiniz kadar if yuvalama yazabilirsiniz, ancak bu tür yapılar çok karmaşıktır, bu nedenle bir programda hata ayıklarken bunları anlamak oldukça zor olacaktır. İşte iç içe if ifadeleri içeren bir örnek:

// bu betiğin sonucu olarak bir mesaj görüntülenecektir: // $flag1 true ve $flag2 false ?>

if...elseif...else ile iç içe koşullar

PHP'de şu şema ile iç içe koşullu ifadeler kullanmak mümkündür: if...elseif...else . Bu, başlangıçta bir dizi koşul ve daha sonra onlar için çok daha fazlası yapmaktan çok daha uygundur. if...elseif...else yapısının sözdizimi aşağıdaki gibidir:

Böyle bir yapıda else sadece bir kez yazılabilir, aksi takdirde istediğiniz kadar yazılabilir. Ayrıca yukarıdaki yapının anahtardan daha düşük olduğu düşünülmektedir.

endif ifadesini kullanma

PHP'de oluşturulan hemen hemen her motor endif ifadesini kullanır. Bu operatörün yapısı aşağıda verilmiştir:

... html etiketleri ve içeriği; ... ... html etiketleri ve içeriği; ...

Bu yapının rahatlığına, tüm içeriğin çıktısını echo aracılığıyla vermektense, dikkat etmeye değer. Durumdan sonra iki nokta üst üste koymayı unutmayın!

Koşullu işlemleri kullanma (?)

Koşullu işlemlerin kullanımı sadece PHP'de değil, benzer diğer dillerde de yaygın bir yaklaşım değildir, ancak bunları da unutmamak gerekir. Koşullu bir işlemin sözdizimi aşağıdaki gibidir:

Önce bir şart gelir. Doğruysa, deyim_1 yürütülür, aksi takdirde deyim_2. Yapının çok net olmadığını düşünüyorum, bu yüzden açıklığa kavuşturmak için birkaç PHP örneği vermeye değer. Örneğin, koşullu bir işlem kullanarak bir sayının modülünü kolayca uygulayabilirsiniz:

Koşullu işlemler, hangi koşula bağlı olarak yalnızca bir değişkenin değerini değiştirmeniz gereken bazı kısa ifadelerde kullanmak yararlı olabilir.