PHP: Pengendali aritmetik. Bentuk awalan kenaikan

Operasi dengan pembolehubah PHP (pengendali)

Terdapat pelbagai kumpulan untuk pelaksanaan.

Operator ialah sesuatu yang terdiri daripada satu atau lebih nilai (ungkapan dalam jargon pengaturcaraan) yang boleh dinilai sebagai nilai baharu (oleh itu, keseluruhan binaan boleh dianggap sebagai ungkapan). Ia mengikuti fungsi atau mana-mana binaan lain yang mengembalikan nilai (contohnya, cetak()) adalah pengendali, tidak seperti semua binaan bahasa lain (contohnya, gema()), yang tidak mengembalikan apa-apa.

Operasi aritmetik dalam PHP

Ingat asas aritmetik sekolah? Pernyataan di bawah berfungsi dengan cara yang sama.

Operator bahagian ("/") sentiasa mengembalikan jenis sebenar, walaupun kedua-dua nilai adalah integer (atau rentetan yang bertukar kepada integer). Jika tidak, hasilnya akan menjadi pecahan.

Operasi mengira baki bahagian " % " hanya berfungsi dengan nombor bulat, jadi penggunaannya pada pecahan mungkin menghasilkan keputusan yang tidak diingini.

Ia adalah mungkin untuk menggunakan kurungan. Keutamaan operasi matematik tertentu berbanding yang lain dan perubahan keutamaan apabila menggunakan kurungan dalam ungkapan aritmetik mengikut peraturan biasa matematik.

Operasi kenaikan dan pengurangan

PHP, seperti C, menyokong pengendali kenaikan dan pengurangan awalan dan pascafix.

Operator kenaikan dan pengurangan postfix

Seperti dalam C, pengendali ini menambah atau mengurangkan nilai pembolehubah, dan dalam ungkapan mengembalikan nilai pembolehubah $a sebelum perubahan. Sebagai contoh:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Mencetak a=11, b=10

Seperti yang anda lihat, pertama pembolehubah $b nilai yang diberikan kepada pembolehubah $a, dan hanya kemudian yang terakhir dinaikkan. Walau bagaimanapun, ungkapan yang nilainya diberikan kepada pembolehubah $b, mungkin lebih sukar - dalam apa jua keadaan, kenaikan $a akan berlaku hanya selepas ia dikira.

Operator kenaikan dan pengurangan awalan

Terdapat juga pengendali kenaikan dan pengurangan, yang dinyatakan dan bukannya selepas nama pembolehubah. Sehubungan itu, mereka mengembalikan nilai pembolehubah selepas perubahan. Contoh:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Mencetak a=9, b=9

Operasi kenaikan dan pengurangan digunakan sangat kerap dalam amalan. Sebagai contoh, ia berlaku dalam hampir mana-mana kitaran untuk .

bergema "

Kenaikan postfix

" ;
$a = 5 ;
echo "Sepatutnya 5: " . $a++ . "
\n" ;

\n" ;

Gema "

Kenaikan awalan

" ;
$a = 5 ;
echo "Mestilah 6: " . ++ $a . "
\n" ;
echo "Mestilah 6: " . $a . "
\n" ;

Gema "

Penurunan postfix

" ;
$a = 5 ;
echo "Sepatutnya 5: " . $a -- . "
\n" ;

\n" ;

Gema "

Pengurangan awalan

" ;
$a = 5 ;
echo "Mestilah 4: " . -- $a . "
\n" ;
echo "Mestilah 4: " . $a . "
\n" ;
?>

Operasi rentetan

PHP mempunyai dua operator untuk bekerja dengan rentetan. Yang pertama ialah operator gabungan ("."), yang mengembalikan gabungan argumen kiri dan kanan. Yang kedua ialah pengendali tugasan dengan penggabungan, yang menambahkan hujah kanan ke kiri. Mari kita berikan contoh khusus:

$a = "Hello" ;
$b = $a . "Dunia!" ; // $b mengandungi rentetan "Hello World!"

$a = "Hello" ;
$a .= "Dunia!" ; // $a mengandungi rentetan "Hello World!"
?>

Operasi bitwise

Operasi ini direka bentuk untuk mengendalikan (set/nyahset/semak) kumpulan bit dalam keseluruhan pembolehubah. Bit integer adalah tidak lebih daripada digit individu nombor yang sama yang ditulis dalam sistem nombor binari. Sebagai contoh, dalam binari nombor 12 akan kelihatan seperti 1100 dan 2 akan kelihatan seperti 10, jadi ungkapan 12|2 akan mengembalikan kita nombor 14 (1110 dalam tatatanda binari). Jika pembolehubah bukan integer, maka ia adalah
pertama dibundarkan, dan kemudian operator berikut digunakan padanya.

Untuk mewakili satu nombor, 32 bit digunakan:

  • 0000 0000 0000 0000 0000 0000 0000 0000 adalah sifar;
  • 0000 0000 0000 0000 0000 0000 0000 0001 ialah 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 ialah 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 ialah 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 ialah 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 ialah 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 ialah 15;

Pengendali bitwise:

Contoh Nama Hasilnya
$a & $b Bitwise "dan" Hanya bit yang ditetapkan dalam kedua-dua $a dan $b ditetapkan.
$a | $b Bitwise "atau" Bit-bit yang ditetapkan sama ada dalam $a atau $b ditetapkan.
$a^$b Eksklusif atau Hanya bit yang ditetapkan sama ada dalam $a sahaja atau $b sahaja ditetapkan
~$a Penafian Bit yang tidak ditetapkan dalam $a ditetapkan, dan sebaliknya.
$a<< $b Beralih ke kiri Semua bit pembolehubah $a dialihkan kedudukan $b ke kiri (setiap kedudukan membayangkan "darab dengan 2")
$a >> $b Beralih ke kanan Semua bit pembolehubah $a dialihkan kedudukan $b ke kanan (setiap kedudukan membayangkan "bahagi dengan 2")

Operasi Perbandingan

Pengendali perbandingan, seperti namanya, membolehkan anda membandingkan dua nilai.

Ini adalah operasi unik dengan cara mereka sendiri kerana, tanpa mengira jenis hujah mereka, mereka sentiasa mengembalikan salah satu daripada dua perkara: salah atau benar. Operasi perbandingan membandingkan dua nilai antara satu sama lain dan, jika keadaan itu benar, kembalikan benar, Dan jika tidak - salah.

PHP hanya membenarkan pembolehubah skalar dibandingkan. Tatasusunan dan objek tidak boleh dibandingkan dalam PHP. Mereka tidak boleh dibandingkan untuk kesamaan (menggunakan operator ==), tetapi PHP tidak mengeluarkan amaran apabila melakukan operasi sedemikian. Jadi, setelah tertanya-tanya mengapa dua tatasusunan yang sama sekali berbeza apabila membandingkannya menggunakan == tiba-tiba berubah menjadi sama, ingat bahawa sebelum perbandingan kedua-dua operan ditukar kepada perkataan tatasusunan, yang kemudiannya dibandingkan.

Lihat Perbandingan tatasusunan untuk butiran.

Pengendali perbandingan:

Contoh Nama Hasilnya
$a == $b sama BENAR jika $a sama dengan $b.
$a === $b Identik sama BENAR jika $a sama dengan $b dan mempunyai jenis yang sama. (Ditambah dalam PHP 4)
$a != $b Tidak sama BENAR jika $a tidak sama dengan $b.
$a<>$b Tidak sama BENAR jika $a tidak sama dengan $b.
$a !== $b Identik tidak sama BENAR jika $a tidak sama dengan $b atau jika ia daripada jenis yang berbeza (Ditambah dalam PHP 4)
$a< $b Kurang BENAR jika $a adalah kurang daripada $b.
$a > $b Lagi BENAR jika $a lebih besar daripada $b.
$a<= $b Kurang atau sama BENAR jika $a kurang daripada atau sama dengan $b.
$a >= $b Lebih atau sama BENAR jika $a lebih besar daripada atau sama dengan $b.

Operasi logik

Pengendali logik direka bentuk secara eksklusif untuk bekerja dengan ungkapan Boolean dan juga kembali salah atau benar.

Berikut ialah jadual operator logik PHP:

Perlu diingatkan bahawa penilaian ungkapan logik yang mengandungi pengendali sedemikian sentiasa berjalan dari kiri ke kanan, dan jika hasilnya sudah jelas (contohnya, palsu&&sesuatu sentiasa memberi salah), maka pengiraan ditamatkan, walaupun ungkapan mengandungi panggilan fungsi. Contohnya, dalam operator $logic = 0&&(time()>100); fungsi standard masa() tidak akan pernah dipanggil.

Berhati-hati dengan operasi logik - jangan lupa tentang penggandaan watak. Sila ambil perhatian bahawa, sebagai contoh, | Dan || - dua pengendali yang sama sekali berbeza, satu daripadanya berpotensi mengembalikan sebarang nombor, dan yang kedua - sahaja salah Dan benar.

Pengendali kenaikan (++) dan pengurangan (--) tidak berfungsi dengan pembolehubah boolean.

Pengendali kesetaraan

Dalam PHP, bermula dari PHP4 terdapat operator perbandingan yang sama - tanda sama tiga kali ganda === ,
atau pengendali cek. PHP agak bertolak ansur dengan rentetan yang secara tersirat ditukar kepada nombor, dan sebaliknya.
Sebagai contoh, kod berikut akan mencetak bahawa nilai pembolehubah adalah sama:

$a=10;
$b="10";

Dan ini walaupun pada hakikatnya pembolehubah $a mewakili nombor dan $b- baris. Sekarang mari kita lihat contoh yang sedikit berbeza:

$a=0; // sifar
$b=""; // baris kosong
if($a==$b) echo "a dan b adalah sama"; // Mencetak "a dan b adalah sama"

Walaupun $a Dan $b jelas tidak sama walaupun dalam erti kata biasa, skrip akan mengisytiharkan bahawa mereka adalah sama. Kenapa ini terjadi? Maksudnya ialah jika salah satu operan pengendali logik boleh ditafsirkan sebagai nombor, maka kedua-dua operan dianggap sebagai nombor. Dalam kes ini, baris kosong bertukar menjadi 0 , yang kemudiannya dibandingkan dengan sifar. Ia tidak menghairankan bahawa pengendali bergema berfungsi.
Masalahnya diselesaikan oleh pengendali kesetaraan === (persamaan tiga kali ganda). Ia bukan sahaja membandingkan dua ungkapan, tetapi juga jenisnya. Mari kita tulis semula contoh kita menggunakan operator ini.

Semua operasi matematik asas tersedia dalam PHP. Kedua-dua integer dan nombor nyata boleh digunakan sebagai operan.

Jadual menunjukkan senarai operator aritmetik:
OperatorTandaPenerangan
Penambahan + Penambahan dua nilai
Penolakan - Menolak satu nilai daripada nilai yang lain
Pendaraban * Mendarab dua nilai
Bahagian / Membahagikan satu nilai dengan nilai yang lain
Mendapat baki bahagian % Membahagikan satu nilai dengan yang lain dan mengembalikan baki (bahagian modulo)
Kenaikan ++ Pendek kata untuk menambah satu nombor
Penurunan -- Kata singkatan untuk mengurangkan nombor dengan satu
Penafian unary - Menukar nombor positif kepada nombor negatif atau negatif kepada positif

Operator tolak, darab, bahagi, modulo dan tambah

Operator tolak, darab, bahagi, modulo, dan tambah digunakan dengan cara yang sama seperti dalam matematik. Di sini adalah bernilai memberi perhatian kepada operator bahagian dan modulo.

Operator bahagian (" / ") mengembalikan nombor titik terapung, melainkan kedua-dua nilai adalah integer (atau rentetan yang ditukar kepada integer) yang dibahagikan dengan integer, dalam hal ini ia mengembalikan nilai integer.

hasil2 = $hasil2
"; echo "result3 = $result3
hasil4 = $hasil4"; ?>

Dalam pembahagian modulo, operan ditukar kepada integer (dengan bahagian pecahan dikeluarkan) sebelum operasi bermula. Hasil daripada operasi baki % akan mempunyai tanda yang sama seperti dividen:

Penafian unary

Operator penolakan unary dilambangkan dengan tanda "-", dan ia membalikkan makna satu-satunya operannya:

Dalam kes ini, kurungan tidak diperlukan kerana penolakan unary mempunyai keutamaan tertinggi, tetapi ia membantu mengatur kod supaya jelas bahawa nombor -5 dan 4 sedang ditambah.

Kenaikan

Operator kenaikan dilambangkan dengan tanda ++ dan boleh diletakkan pada kedua-dua belah operan yang dikendalikannya. Ia meningkatkan nilai ini sebanyak satu, sama seperti menambah satu pada nilai. Keputusan sebenar bergantung pada sama ada pengendali digunakan sebelum atau selepas operan yang digunakan. Operator ini sering digunakan dengan pembolehubah, dan selalunya ini berlaku di dalam gelung (gelung akan dibincangkan kemudian).

Bentuk awalan kenaikan

Borang awalan- ini adalah apabila pengendali kenaikan diletakkan sebelum operan, bentuk tatatanda ini bermakna bahawa kenaikan akan dilaksanakan terlebih dahulu: ia meningkatkan nilai operan dengan satu dan hanya kemudian arahan yang lain dilaksanakan:

Bentuk kenaikan postfix

Borang Postfix ditulis sedikit berbeza - kenaikan terletak dalam kes ini selepas operan. Dalam tatatanda postfix, penggunaan pertama operan mengembalikan nilai semasanya, hanya selepas itu nilai akan ditambah dengan satu:

Penurunan

Pengendali penyusutan dilambangkan dengan tanda --, dan tidak seperti pengendali kenaikan, ia mengurangkan, bukannya menambah, nilai operannya dengan satu. Penurunan juga membenarkan notasi awalan dan pascafiks:

Setakat yang saya faham, penerangan tentang keupayaan asas SQL, yang mana saya sedikit mengganggu kursus kami beberapa pelajaran yang lalu, ternyata tidak berlebihan.

Hari ini saya ingin sekali lagi menyimpang sedikit dari "kursus parti" dan bercakap tentang struktur. Tetapi bukan SQL, tetapi PHP itu sendiri. Ini akan membantu anda membaca penyenaraian program dengan lebih mudah, dan saya akan dapat menulis fungsi seterusnya dengan lebih ringkas tanpa rasa takut anda tidak akan memahami saya.

Jangan risau, ini sama sekali tidak bermakna saya akan terus menulis semua yang rumit dan kabur. Tidak, tiada seperti itu. Saya cuma mahu anda faham bahawa PHP bukanlah BASIC, di mana anda hanya boleh menulis seperti yang anda boleh tulis. Dan tiada yang lain. Baik kata, adakah anda faham apa yang anda tulis, Kurepin?! Faham, faham...

Bertemu - tempoh.

Titik "." anda sudah tahu, ia menggabungkan rentetan. Tambah "+" menambah nombor, dan titik menggabungkan garis.
$a1="100";
$a2="200"
Apa yang berlaku jika anda melipat $a1 Dan $a2? Bagaimana untuk meletakkan ini ...
$a1+$a2=300
$a1.$a2="100200"
... dan jangan pernah melupakannya.

Berikut ialah cara lain untuk menulis tambahan.

Mari kita anggap bahawa kita sedang mengarang beberapa jenis rentetan kompleks daripada pelbagai serpihan. Kami boleh menambahkan data baharu pada penghujung pembolehubah kami seperti ini:

$this->string_about_letters = $this->string_about_letters."beberapa huruf..."; $this->string_about_letters = $this->string_about_letters." beberapa huruf lagi..."; $this->string_about_letters = $this->string_about_letters." dan beberapa huruf lagi..."; $this->string_about_letters = $this->string_about_letters." beberapa huruf lagi...";
Agak lama, bukan? Mengulang pembolehubah panjang menghalangnya $this->string_about_letters. Oleh itu, kami akan merekodkannya secara berbeza:
$this->string_about_letters .= "beberapa huruf..."; $this->string_about_letters .= "beberapa huruf lagi..."; $this->string_about_letters .= "dan beberapa huruf lagi..."; $this->string_about_letters .= "beberapa huruf lagi...";
Lebih selesa, bukan?

Perkara yang sama berlaku untuk penambahan matematik:
$abc+=1;
Tambahkan 1 pada kandungan pembolehubah $abc.

Bagaimana lagi anda boleh menambah satu? Biasanya, menurut S-shno:

$abc++; atau +$abc;

Kedua-dua ungkapan ini biasanya digunakan dalam binaan kitaran. Dan bukan dengan sendirinya, tetapi dalam beberapa ungkapan yang lebih kompleks.
Perbezaan antara kedua-dua ungkapan ini ialah dalam kes pertama, nilai pembolehubah diambil kira dalam ungkapan, dan kemudian satu ditambah, dan dalam yang kedua, sebaliknya adalah benar - pertama nilai pembolehubah dinaikkan. , dan kemudian nilai yang terhasil digunakan dalam ungkapan. Satu contoh akan menjelaskannya:
$a=1;
echo $a++;
gema +$a;
Pertama bergema akan mencetak "1" untuk kami, dan mencetak yang kedua?.. tetapi itu tidak betul! Tidak 2 ia akan mencetak, dan "3". kenapa? Teka sendiri.

Hari ini saya juga ingin memecahkan untuk anda satu kod yang sering kami gunakan dalam program kami. Dan secara umum dalam mana-mana program di mana data diambil daripada pangkalan data SQL.

Kami bercakap, sudah tentu, tentang mendapatkan data melalui pilih-A.

Anda sudah tahu cara untuk menanyakan pangkalan data, tetapi kami belum benar-benar bercakap tentang cara menghuraikan data yang diterima. Sementara itu, ini boleh dilakukan dengan pelbagai cara.

Mari kita mulakan dengan contoh. Katakan kita memilih tajuk filem video yang dikeluarkan pada tahun 2000 daripada pangkalan data kaset video dan ingin mencetaknya dalam bentuk jadual (dengan ID kaset, sudah tentu).

Jadi, anda boleh mengatur prosedur seperti ini (anda akan menemui sesuatu yang serupa dalam banyak buku teks):

$this->sql_query="select * from film where f_date between "2000-01-01 00:00:00" and "2000-12-31 23:59:59 order by f_id""; $this->sql_execute(); $str=" "; $row_count=mysql_num_rows($this->sql_res); for($i=0;$isql_res); $str=$str." \n"; ) $str=$str."
".$filem["f_id"]."".$filem["f_name"]."
";
Biar saya jelaskan.

Kami membuat permintaan kepada pangkalan data (dengan cara ini, perhatikan keadaan baru dalam permintaan: antara tarikh dan tarikh, borang ini sering digunakan untuk menunjukkan julat tarikh).

Kami memulakan pembolehubah teks untuk memasukkan kod HTML ke dalamnya dengan menambah serpihan teks pertama - permulaan jadual.

Kami kemudian membuka gelung dengan beberapa lelaran sama dengan bilangan baris yang diambil daripada pertanyaan.

Dalam badan gelung, kami mengekstrak baris seterusnya daripada permintaan kami ke dalam pembolehubah tatasusunan $filem. Fungsi mysql_fetch_array menyusun data ke dalam tatasusunan bersekutu, menggunakan nama medan daripada jadual sebagai kunci.


    Tatasusunan bersekutu adalah sama seperti tatasusunan biasa (bernombor), hanya rentetan aksara, bukannya nombor, digunakan sebagai nama untuk sel. Dan anda harus mengakses sel tatasusunan sedemikian dengan sewajarnya: $abc["first"], $abc["mama"]...
Seterusnya, kami menambah baris seterusnya jadual pada pembolehubah teks kami, menggunakan data yang diperoleh daripada pangkalan data. Untuk mengakses data, seperti yang anda lihat, nama medan jadual digunakan. Ini adalah harta fungsi mysql_fetch_array, seperti yang telah saya katakan.

    Sila beri perhatian khusus: anda tidak boleh mengakses sel tatasusunan bersekutu dalam rentetan teks! Ia perlu untuk memecahkan garisan dan "tampal" nilai menggunakan titik (.), seperti yang ditunjukkan.
Kitaran diulangi bilangan kali yang diperlukan, selepas itu kita tutup $str tag html terakhir. sedia.

Tetapi bukankah ini terlalu menyusahkan? Pada pendapat saya, sangat. Saya mencadangkan untuk menulis semua ini secara berbeza: semuanya sama, tetapi lebih pendek.