<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>switch - Kama Kaczmarek</title>
	<atom:link href="https://kamakaczmarek.net/tag/switch/feed/" rel="self" type="application/rss+xml" />
	<link>https://kamakaczmarek.net/tag/switch/</link>
	<description>Strona z materiałami dla uczniów i nauczycieli</description>
	<lastBuildDate>Tue, 29 Sep 2026 11:47:04 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>4. PHP &#8211; instrukcje sterujące &#8211; instrukcje warunkowe, wyboru oraz operator warunkowy</title>
		<link>https://kamakaczmarek.net/php-instrukcje-sterujace-instrukcje-warunkowe-wyboru-oraz-operator-warunkowy/</link>
		
		<dc:creator><![CDATA[Kama]]></dc:creator>
		<pubDate>Thu, 18 Oct 2018 18:35:06 +0000</pubDate>
				<category><![CDATA[aplikacje]]></category>
		<category><![CDATA[dla ucznia]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[else]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[instrukcja warunkowe]]></category>
		<category><![CDATA[instrukcje sterujące]]></category>
		<category><![CDATA[instrukcje wyboru]]></category>
		<category><![CDATA[operator warunkowy]]></category>
		<category><![CDATA[switch]]></category>
		<guid isPermaLink="false">https://kamakaczmarek.net/?p=2294</guid>

					<description><![CDATA[<p>Instrukcje warunkowe TaskQuest Dodatek Szybki quiz – przypomnienie poprzedniej lekcji 1. Które nazwy zmiennych są poprawne w PHP? a) $2liczba b) $_licznik c) $moja zmienna d) $imieUzytkownika e) $xp-max 2. Co zostanie wyświetlone? 3. Co zostanie wyświetlone? 4. Jaki będzie wynik? 5. Co zostanie wyświetlone? 6. Jaki będzie wynik każdego var_dump()? 7. Ile wynosi $a [&#8230;]</p>
<p>Artykuł <a href="https://kamakaczmarek.net/php-instrukcje-sterujace-instrukcje-warunkowe-wyboru-oraz-operator-warunkowy/">4. PHP &#8211; instrukcje sterujące &#8211; instrukcje warunkowe, wyboru oraz operator warunkowy</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Instrukcje warunkowe</h1>



<p><a href="#TaskQuest">TaskQuest</a></p>
<p><a href="#dodatek">Dodatek</a></p>



<h2 class="wp-block-heading">Szybki quiz – przypomnienie poprzedniej lekcji</h2>



<p class="wp-block-paragraph"><strong>1.</strong> Które nazwy zmiennych są poprawne w PHP?</p>



<p class="wp-block-paragraph">a) <code class="prettyprint lang-sql" style="font-size: 0.85em;">$2liczba</code> b) <code class="prettyprint lang-sql" style="font-size: 0.85em;">$_licznik</code> c) <code class="prettyprint lang-sql" style="font-size: 0.85em;">$moja zmienna</code> d) <code class="prettyprint lang-sql" style="font-size: 0.85em;">$imieUzytkownika</code> e) <code class="prettyprint lang-sql" style="font-size: 0.85em;">$xp-max</code></p>



<p class="wp-block-paragraph"><strong>2.</strong> Co zostanie wyświetlone?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$a = 7;
$b = 2;
echo $a % $b . "&lt;br&gt;";
echo $a ** $b . "&lt;br&gt;";
echo $a / $b;
</code></pre>



<p class="wp-block-paragraph"><strong>3.</strong> Co zostanie wyświetlone?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$e = 5;
echo $e++;
echo $e;
echo ++$e;
</code></pre>



<p class="wp-block-paragraph"><strong>4.</strong> Jaki będzie wynik?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">var_dump(10 == "10");
var_dump(10 === "10");
</code></pre>



<p class="wp-block-paragraph"><strong>5.</strong> Co zostanie wyświetlone?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$x = 10;
$y = 3;
echo $x . $y . "&lt;br&gt;";
echo $x + $y;
</code></pre>



<p class="wp-block-paragraph"><strong>6.</strong> Jaki będzie wynik każdego <code class="prettyprint lang-sql" style="font-size: 0.85em;">var_dump()</code>?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$a = 10;
$b = 2;
var_dump($a &gt; 5 &amp;&amp; $b &gt; 5);
var_dump($a &gt; 5 || $b &gt; 5);
var_dump($a &gt; 5 xor $b &lt; 5);
</code></pre>



<p class="wp-block-paragraph"><strong>7.</strong> Ile wynosi <code class="prettyprint lang-sql" style="font-size: 0.85em;">$a</code> po wykonaniu kodu?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$a = 5;
$b = &amp;$a;
$b = 9;
</code></pre>



<p class="wp-block-paragraph"><strong>8.</strong> Co się stanie po uruchomieniu tego kodu?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">const XP_NA_POZIOM = 100;
XP_NA_POZIOM = 200;
</code></pre>



<p class="wp-block-paragraph"><strong>9. (TaskQuest)</strong> Co wyświetli ten kod i dlaczego w projekcie jest to problem?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$poziom = 1;
echo "Do poziomu " . ++$poziom . "&lt;br&gt;";
echo "Twój poziom: $poziom";
</code></pre>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary><strong>Odpowiedzi</strong></summary>
<h4 class="wp-block-heading">Szybki quiz – poprzednia lekcja</h4>



<ol class="wp-block-list">
<li>Poprawne: <strong>b</strong> i <strong>d</strong>. <code class="prettyprint lang-sql" style="font-size: 0.85em;">$2liczba</code> – zaczyna się od cyfry, <code class="prettyprint lang-sql" style="font-size: 0.85em;">$moja zmienna</code> – spacja, <code class="prettyprint lang-sql" style="font-size: 0.85em;">$xp-max</code> – minus jest operatorem, nie częścią nazwy.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">1</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">49</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">3.5</code> (reszta z dzielenia, potęgowanie, dzielenie zwraca ułamek).</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">567</code> – <code class="prettyprint lang-sql" style="font-size: 0.85em;">$e++</code> najpierw zwraca 5, potem zwiększa; <code class="prettyprint lang-sql" style="font-size: 0.85em;">echo $e</code> daje 6; <code class="prettyprint lang-sql" style="font-size: 0.85em;">++$e</code> najpierw zwiększa do 7, potem zwraca.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">bool(true)</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">bool(false)</code> – wartości równe, ale typy różne (int i string).</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">103</code> (łączenie tekstów kropką), <code class="prettyprint lang-sql" style="font-size: 0.85em;">13</code> (dodawanie).</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">bool(false)</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">bool(true)</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">bool(false)</code> – przy <code class="prettyprint lang-sql" style="font-size: 0.85em;">xor</code> oba warunki są prawdziwe, więc wynik to <code class="prettyprint lang-sql" style="font-size: 0.85em;">false</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">9</code> – <code class="prettyprint lang-sql" style="font-size: 0.85em;">$b</code> jest referencją do <code class="prettyprint lang-sql" style="font-size: 0.85em;">$a</code>, więc zmiana <code class="prettyprint lang-sql" style="font-size: 0.85em;">$b</code> zmienia <code class="prettyprint lang-sql" style="font-size: 0.85em;">$a</code>.</li>



<li>Błąd składni (parse error) – stałej nie można przypisać nowej wartości.</li>



<li>„Do poziomu 2” i „Twój poziom: 2”. <code class="prettyprint lang-sql" style="font-size: 0.85em;">++$poziom</code> trwale zmienia zmienną, więc od tej linii użytkownik „ma” poziom 2, choć nie awansował. Zamiast tego: <code class="prettyprint lang-sql" style="font-size: 0.85em;">($poziom + 1)</code>. Ważne w tej lekcji – jeśli taki zapis został w projekcie, zepsuje logikę awansu.</li>
</ol>
</details>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">if, else, elseif</h2>



<p class="wp-block-paragraph">Instrukcje warunkowe (if, else, elseif), instrukcje wyboru (switch, match) oraz operatory warunkowe pozwalają programowi podejmować decyzje i wykonywać różne fragmenty kodu w zależności od spełnienia określonych warunków. Najprościej mówiąc – odpowiadają na pytania &#8222;co jeżeli?&#8221;.</p>



<p class="wp-block-paragraph">Podam wam teraz prosty przykład:</p>



<p class="wp-block-paragraph"><em>Jeżeli liczba jest większa od zera, to wypisz że jest dodatnia</em></p>



<p class="wp-block-paragraph">zapis tego stwierdzenia za pomocą instrukcji <strong>if</strong> będzie wyglądał następująco:</p>



<pre class="wp-block-preformatted prettyprint">if($liczba&gt;0) echo "jest dodatnia";</pre>



<p class="wp-block-paragraph">Jeżeli potrzebujemy rozwinąć naszą myśl o zapytanie &#8222;a co gdy warunek nie jest spełniony?&#8221; &#8211; używamy <strong>else.</strong></p>



<p class="wp-block-paragraph"><em>Jeżeli liczba jest większa od zera, to wypisz że jest dodatnia</em> &#8211; <em>w przeciwnym wypadku napisz, że nie jest dodatnia</em></p>



<pre class="wp-block-preformatted prettyprint">if($liczba&gt;0) {<br />    echo "jest dodatnia";<br />} <br />else {<br />    echo "nie jest dodatnia";<br />}</pre>



<p class="wp-block-paragraph">Oczywiście instrukcje możemy zagnieżdżać jedna w drugiej.</p>



<p class="wp-block-paragraph">Może zajść sytuacja, że przed użyciem <strong>else </strong>chcemy sprawdzić jeszcze jakieś inne warunki, wtedy przychodzi nam z pomocą instrukcja <strong>elseif.</strong></p>



<pre class="wp-block-preformatted prettyprint">if($liczba&gt;0) <br />{<br />    echo "jest dodatnia";<br />} <br />elseif($liczba==0)<br />{<br />    echo "liczba jest zerem";<br />}<br />else <br />{<br />    echo "jest ujemna";<br />}</pre>



<p><strong>Ważne:</strong>&nbsp;Instrukcje można zagnieżdżać jedna w drugiej.</p>
<p><span style="color: #ff0000;"><strong><span style="font-size: 18pt;">UWAGA!</span>&nbsp;<span style="color: #000000;">w instrukcji warunkowej nie używamy operatora &#8222;=&#8221; (operator przypisania). Używamy &#8222;==&#8221; (dwa znaki =) lub &#8222;===&#8221; (trzy znaki =)</span></strong></span></p>



<h2 class="wp-block-heading">switch</h2>



<p class="wp-block-paragraph">Gdy wiemy, że nasza zmienna będzie przyjmowała jakieś konkretne wartości, możemy użyć wtedy instrukcji <strong>switch.</strong></p>



<pre class="wp-block-preformatted prettyprint">switch ($plec) {<br />    case "K":<br />        echo "Kobieta";<br />        break;<br />    case "M":<br />        echo "Mężczyzna";<br />        break;<br />    default:<br />        echo "Nierozpoznany wybór";<br />        break;<br />}</pre>



<p class="wp-block-paragraph"><strong>break;</strong> używamy by przerwać działanie instrukcji, gdy warunek zostanie spełniony.</p>



<p class="wp-block-paragraph"><strong>default;</strong> oznacza akcję domyślą, gdy żaden z warunków nie zostanie spełniony.</p>



<p><span style="color: #ff0000;"><strong><span style="font-size: 18pt;">UWAGA!</span> &nbsp;</strong></span><strong>Switch używa luźnego porównania (==), co może prowadzić do niespodziewanych rezultatów przy porównywaniu typów.</strong></p>



<h2 class="wp-block-heading">&nbsp;Wyrażenie match (PHP 8.0+)</h2>



<p><strong>Match</strong>&nbsp;to nowoczesna alternatywa dla switch, wprowadzona w PHP 8.0. Jest bezpieczniejsza i bardziej zwięzła:</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$kolor = match ($status) {
    'draft' =&gt; 'gray',
    'published' =&gt; 'green',
    'archived' =&gt; 'red',
    default =&gt; 'black',
};</code></pre>



<h3 class="wp-block-heading">Różnice między switch a match:</h3>



<table style="width: 100%; height: 140px;">
<thead>
<tr style="height: 28px;">
<th style="height: 28px;">Cecha</th>
<th style="height: 28px;">switch</th>
<th style="height: 28px;">match</th>
</tr>
</thead>
<tbody>
<tr style="height: 28px;">
<td style="height: 28px;">Porównanie</td>
<td style="height: 28px;">Luźne (==)</td>
<td style="height: 28px;">Ścisłe (===)</td>
</tr>
<tr style="height: 28px;">
<td style="height: 28px;">Zwraca wartość</td>
<td style="height: 28px;">Nie</td>
<td style="height: 28px;">Tak</td>
</tr>
<tr style="height: 28px;">
<td style="height: 28px;">Wymaga break</td>
<td style="height: 28px;">Tak</td>
<td style="height: 28px;">Nie</td>
</tr>
<tr style="height: 28px;">
<td style="height: 28px;">Fall-through</td>
<td style="height: 28px;">Tak</td>
<td style="height: 28px;">Nie</td>
</tr>
</tbody>
</table>



<h3>Przykład z wieloma warunkami:</h3>



<pre class="wp-block-code prettyprint"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$statusCode = 404;
$komunikat = match($statusCode) {
    200, 201, 204 =&gt; "Sukces",
    400, 404 =&gt; "Błąd klienta",
    500, 502, 503 =&gt; "Błąd serwera",
    default =&gt; "Nieznany status"
};
echo $komunikat;</code></pre>



<h3>Match z wyrażeniami:</h3>



<pre class="wp-block-code prettyprint"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$wiek = 25;
$kategoria = match(true) {
    $wiek &lt; 13 =&gt; "dziecko",
    $wiek &lt; 18 =&gt; "nastolatek",
    $wiek &lt; 65 =&gt; "dorosły",
    default =&gt; "senior"
};
echo $kategoria;</code></pre>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIEBAA" data-hveid="CAIIAAgACBAQAA" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<h3 class="otQkpb" role="heading" aria-level="3" data-wiz-attrbind="aria-level=kE7J3b_2j/fLk2Md" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 20px; font-weight: 600; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(238, 240, 255);">Dlaczego <code class="prettyprint lang-sql" style="font-size: 0.85em;">match<!--TgQPHd|||[]--></code> jest lepsze?<!--TgQPHd|||[]--></h3>
</div>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIERAB" data-hveid="CAIIAAgACBEQAQ" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<ul>
<li class="Z1qcYe" data-sfc-cp="" data-sfc-root="ep" data-hveid="CAIIAAgACBEQAg" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><span class="iNqyIf" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><strong class="rQesXe MPyX" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">Zwraca wartość:<!--TgQPHd|||[]--></strong> <code class="prettyprint lang-sql" style="font-size: 0.85em;">match<!--TgQPHd|||[]--></code> jest wyrażeniem (expression), co oznacza, że możesz przypisać jego wynik bezpośrednio do zmiennej lub użyć go w instrukcji <code class="prettyprint lang-sql" style="font-size: 0.85em;">return<!--TgQPHd|||[]--></code>.<!--TgQPHd|||[]--></span><!--TgQPHd|||[]--></li>
</ul>
</div>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIERAF" data-hveid="CAIIAAgACBEQBQ" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<ul>
<li class="Z1qcYe" data-sfc-cp="" data-sfc-root="ep" data-hveid="CAIIAAgACBEQBg" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><span class="iNqyIf" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><strong class="rQesXe MPyX" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">Brak potrzebny <code class="prettyprint lang-sql" style="font-size: 0.85em;">break<!--TgQPHd|||[]--></code>:<!--TgQPHd|||[]--></strong> Nie musisz pisać <code class="prettyprint lang-sql" style="font-size: 0.85em;">break<!--TgQPHd|||[]--></code> przy każdym przypadku. Kod nie &#8222;wpada&#8221; automatycznie w kolejne bloki (brak efektu <em class="zhvwWe" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">fall-through<!--TgQPHd|||[]--></em>), co eliminuje częste błędy.<!--TgQPHd|||[]--></span><!--TgQPHd|||[]--></li>
</ul>
</div>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIERAJ" data-hveid="CAIIAAgACBEQCQ" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<ul>
<li class="Z1qcYe" data-sfc-cp="" data-sfc-root="ep" data-hveid="CAIIAAgACBEQCg" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><span class="iNqyIf" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><strong class="rQesXe MPyX" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">Ścisłe porównanie (<code class="prettyprint lang-sql" style="font-size: 0.85em;">===<!--TgQPHd|||[]--></code>):<!--TgQPHd|||[]--></strong> <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch<!--TgQPHd|||[]--></code> używa luźnego porównania (<code class="prettyprint lang-sql" style="font-size: 0.85em;">==<!--TgQPHd|||[]--></code>), co może prowadzić do niespodzianek (np. <code class="prettyprint lang-sql" style="font-size: 0.85em;">0 == 'tekst'<!--TgQPHd|||[]--></code> w starych wersjach PHP zwracało <code class="prettyprint lang-sql" style="font-size: 0.85em;">true<!--TgQPHd|||[]--></code>). <code class="prettyprint lang-sql" style="font-size: 0.85em;">match<!--TgQPHd|||[]--></code> porównuje rygorystycznie – sprawdza zarówno wartość, jak i typ.<!--TgQPHd|||[]--></span><!--TgQPHd|||[]--></li>
</ul>
</div>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIERAN" data-hveid="CAIIAAgACBEQDQ" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<ul>
<li class="Z1qcYe" data-sfc-cp="" data-sfc-root="ep" data-hveid="CAIIAAgACBEQDg" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><span class="iNqyIf" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><strong class="rQesXe MPyX" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">Wymóg obsłużenia wszystkich opcji:<!--TgQPHd|||[]--></strong> Jeśli <code class="prettyprint lang-sql" style="font-size: 0.85em;">match<!--TgQPHd|||[]--></code> nie dopasuje żadnej wartości i nie zdefiniujesz bloku <code class="prettyprint lang-sql" style="font-size: 0.85em;">default<!--TgQPHd|||[]--></code>, PHP wyrzuci błąd (<code class="prettyprint lang-sql" style="font-size: 0.85em;">UnhandledMatchError<!--TgQPHd|||[]--></code>). Dzięki temu trudniej przeoczyć błąd w kodzie.<!--TgQPHd|||[]--></span><!--TgQPHd|||[]--></li>
</ul>
</div>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIERAR" data-hveid="CAIIAAgACBEQEQ" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<ul>
<li class="Z1qcYe" data-sfc-cp="" data-sfc-root="ep" data-hveid="CAIIAAgACBEQEg" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><span class="iNqyIf" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"><strong class="rQesXe MPyX" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">Łączenie warunków:<!--TgQPHd|||[]--></strong><span data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);"> Możesz łatwo połączyć kilka warunków po przecinku:</span></span>
<div class="r1PmQe" data-sfc-cp="" data-sfc-root="ep" data-wiz-uids="kE7J3b_4c,kE7J3b_4b" data-hveid="CAIIAAgACBUQAA" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 4px 0px 0px; text-decoration: none; border-bottom: 0px rgb(238, 240, 255);">
<div data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(238, 240, 255);">
<div class="LIBz9e" data-animation-atomic="" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 3px 0px 0px; text-decoration: none; border-bottom: 0.8px solid rgb(44, 46, 53);"> </div>
</div>
</div>
</li>
</ul>
</div>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$wynik = match ($rola) { 
    'admin', 'editor' =&gt; 'ma dostęp', 
    'guest' =&gt; 'brak dostępu', 
};</code></pre>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIFhAA" data-hveid="CAIIAAgACBYQAA" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<h3 class="otQkpb" role="heading" aria-level="3" data-wiz-attrbind="aria-level=kE7J3b_4n/fLk2Md" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 20px; font-weight: 600; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(238, 240, 255);">Kiedy nadal warto używać <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch<!--TgQPHd|||[]--></code>?<br /><!--TgQPHd|||[]--></h3>
</div>



<div class="" data-bfc="" data-ved="2ahUKEwil6fmQ3u2WAxWOFxAIHcmzGScQi4wTegoIAggACAAIFxAA" data-hveid="CAIIAAgACBcQAA" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">
<div class="n6owBd awi2gc" data-sfc-cp="" data-sfc-root="ep" data-hveid="CAIIAAgACBcQAQ" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">Użyj <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch<!--TgQPHd|||[]--></code>, jeśli w danym bloku <code class="prettyprint lang-sql" style="font-size: 0.85em;">case<!--TgQPHd|||[]--></code> musisz wykonać <strong class="rQesXe MPyX" data-sfc-cp="" data-sfc-root="ep" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">złożoną logikę wielolinijkową<!--TgQPHd|||[]--></strong> (kilka operacji, pętli itp.).</div>
<div class="n6owBd awi2gc" data-sfc-cp="" data-sfc-root="ep" data-hveid="CAIIAAgACBcQAQ" data-complete="true" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif, &quot;Noto Color Emoji&quot;; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);">Wyrażenie <code class="prettyprint lang-sql" style="font-size: 0.85em;">match<!--TgQPHd|||[]--></code> pozwala na wykonanie tylko jednego wyrażenia po strzałce <code class="prettyprint lang-sql" style="font-size: 0.85em;">=&gt;</code></div>
</div>



<h3 class="wp-block-heading"><em><strong>Alternatywna składnia if i switch</strong></em></h3>



<p class="wp-block-paragraph">Można zastąpić nawias&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">{</code>&nbsp;znakiem&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">:</code>&nbsp;i zamiast zamykającego&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">}</code>&nbsp;użyć odpowiednio&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">endif;</code>&nbsp;lub&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">endswitch;</code></p>



<h4 class="wp-block-heading">Przykład dla if:</h4>



<pre class="wp-block-code prettyprint"><code class="prettyprint lang-sql" style="font-size: 0.85em;">if ($a == 5):
    echo "a jest równe 5";
    echo "...";
elseif ($a == 6):
    echo "a jest równe 6";
    echo "!!!";
else:
    echo "a nie jest 5 ani 6";
endif;</code></pre>



<h4 class="wp-block-heading">Przykład dla switch:</h4>



<pre class="wp-block-preformatted prettyprint">switch ($plec):<br />    case "K":<br />    echo "Kobieta";<br />    break;<br />case "M":<br />    echo "Mężczyzna";<br />    break;<br />default:<br />    echo "Nierozpoznany wybór";<br />    break;<br />endswitch;</pre>



<p class="wp-block-paragraph"><strong>Ta forma zapisu jest bardzo rzadko spotykana</strong>&nbsp;i używana głównie w szablonach mieszających PHP z HTML.</p>



<h2 class="wp-block-heading">Operator warunkowy (ternary)</h2>



<p>Operator warunkowy to skrócona forma instrukcji if&#8230;else, która zwraca wartość:</p>



<pre class="wp-block-code prettyprint"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$wiek = 20;
$status = ($wiek &gt;= 18) ? "pełnoletni" : "niepełnoletni";
echo $status; // wypisze: pełnoletni</code></pre>



<p>Składnia:&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">(warunek) ? wartość_jeśli_prawda : wartość_jeśli_fałsz</code></p>



<h3>Zagnieżdżone operatory:</h3>



<pre class="wp-block-code prettyprint"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$ocena = 85;
$wynik = ($ocena &gt;= 90) ? "celujący" 
       : ($ocena &gt;= 75) ? "bardzo dobry"
       : ($ocena &gt;= 60) ? "dobry"
       : "dostateczny";</code></pre>



<h2 class="wp-block-heading">Null Coalescing Operator (PHP 7.0+)</h2>



<p>Operator&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">??</code>&nbsp;sprawdza, czy zmienna istnieje i nie jest null:</p>



<pre class="wp-block-code prettyprint"><code class="prettyprint lang-sql" style="font-size: 0.85em;">// Stary sposób:
$nazwa = isset($_GET&#91;'nazwa']) ? $_GET&#91;'nazwa'] : 'Gość';

// Nowy sposób (PHP 7.0+):
$nazwa = $_GET&#91;'nazwa'] ?? 'Gość';

// Łańcuchowe sprawdzanie (PHP 7.0+):
$config = $userConfig ?? $defaultConfig ?? 'brak';</code></pre>



<h2 class="wp-block-heading">Spaceship Operator (PHP 7.0+)</h2>



<p>Operator&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;=&gt;</code>&nbsp;służy do porównywania wartości:</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$a = 10;
$b = 5;

echo $a &lt;=&gt; $b; // zwraca 1 (gdy a &gt; b)
echo $b &lt;=&gt; $a; // zwraca -1 (gdy b &lt; a)
echo $a &lt;=&gt; $a; // zwraca 0 (gdy a == b)

// Przydatny przy sortowaniu:
usort($array, fn($a, $b) =&gt; $a &lt;=&gt; $b);</code></pre>



<h2 class="wp-block-heading">Zadania do wykonania:</h2>



<p class="wp-block-paragraph"><strong>Zadanie 1:</strong> Napisz program sprawdzający czy liczba jest parzysta.</p>



<h5 class="wp-block-heading">Rozwiązanie:</h5>



<pre class="wp-block-preformatted prettyprint">$a = 5;	<br />if ($a == 0) {<br />    echo 'podałeś 0';<br />} elseif ($a % 2 == 0) {<br />    echo 'parzysta';<br />} else {<br />    echo 'nieparzysta'; <br />}</pre>



<p class="wp-block-paragraph"><strong>Zadanie 2:</strong> Porównaj ze sobą 2 dowolne liczby i wypisz która jest większa.</p>



<h5 class="wp-block-heading">Rozwiązanie:</h5>



<pre class="wp-block-preformatted prettyprint">echo "&lt;u&gt;Zadanie 2: Porównaj ze sobą 2 dowolne liczby i wypisz która jest większa.&lt;/u&gt;&lt;br&gt;&lt;br&gt;";<br />$a = 10;<br />$b = 5;<br /><br />echo "Porównujemy liczby $a i $b&lt;br&gt;";<br />if ($a &gt; $b) {<br />    echo "większa jest liczba a = $a";<br />} elseif ($b &gt; $a) {<br />    echo "większa jest liczba b = $b"; <br />} else {<br />    echo "liczby są równe";<br />}<br /><br />//rozwiązanie z match<br />$wynik = match(true) {<br />    $a &gt; $b =&gt; "większa jest liczba a = $a",<br />    $b &gt; $a =&gt; "większa jest liczba b = $b",<br />    default =&gt; "liczby są równe"<br />};<br />echo $wynik;</pre>



<p class="wp-block-paragraph"><strong>Zadanie 3:</strong> Porównaj ze sobą 4 nie równe sobie liczby i wypisz największą.</p>



<h5 class="wp-block-heading">Rozwiązanie:</h5>



<pre class="wp-block-preformatted prettyprint">echo "&lt;u&gt;Zadanie 3: Porównaj ze sobą 4 nierówne sobie liczby i wypisz największą.&lt;/u&gt;&lt;br&gt;&lt;br&gt;";<br />$a = 10;<br />$b = 5;<br />$c = 18;<br />$d = 1;	<br />$max = $a;<br /><br />echo "Porównujemy liczby: $a, $b, $c, $d&lt;br&gt;";	<br /><br />if ($b &gt; $max) { $max = $b; }<br />if ($c &gt; $max) { $max = $c; }<br />if ($d &gt; $max) { $max = $d; } 	<br /><br />echo "największa z liczb to $max";</pre>



<p class="wp-block-paragraph"><strong>Zadanie 4:</strong> Porównaj ze sobą 3 nie równe sobie liczby i wypisz je w kolejności od największej do najmniejszej.</p>



<h5 class="wp-block-heading">Rozwiązanie:</h5>



<pre class="wp-block-preformatted prettyprint">echo "&lt;u&gt;Zadanie 4: Porównaj ze sobą 3 nierówne sobie liczby i wypisz je w kolejności od największej do najmniejszej.&lt;/u&gt;&lt;br&gt;&lt;br&gt;";<br />$a = 10;<br />$b = 5;<br />$c = 18;	<br /><br />echo "Porównujemy liczby: $a, $b, $c&lt;br&gt;";	<br /><br />// Szukamy najmniejszej<br />$min = $a;<br />if ($b &lt; $min) { $min = $b; }			<br />if ($c &lt; $min) { $min = $c; }	 <br /><br />// Szukamy największej<br />$max = $a;<br />if ($b &gt; $max) { $max = $b; }  <br />if ($c &gt; $max) { $max = $c; }  <br /><br />// Środkowa to ta, która nie jest ani min ani max<br />if ($a != $min &amp;&amp; $a != $max) { $mid = $a; }<br />if ($b != $min &amp;&amp; $b != $max) { $mid = $b; }<br />if ($c != $min &amp;&amp; $c != $max) { $mid = $c; }    	<br /><br />echo "Liczby posortowane: $max, $mid, $min";</pre>



<p class="wp-block-paragraph"><strong>Zadanie 5:</strong> Porównaj ze sobą 4 nie równe sobie liczby i wypisz je w kolejności od największej do najmniejszej.</p>



<h5 class="wp-block-heading">Rozwiązanie:</h5>



<pre class="wp-block-preformatted prettyprint">echo "&lt;u&gt;Zadanie 5: Porównaj ze sobą 4 nierówne sobie liczby i wypisz je w kolejności od największej do najmniejszej.&lt;/u&gt;&lt;br&gt;&lt;br&gt;";<br />$a = 10;	<br />$b = 5;	<br />$c = 18;	<br />$d = 1;	<br /><br />echo "Porównujemy liczby: $a, $b, $c, $d&lt;br&gt;";	<br /><br />// Szukamy najmniejszej<br />if ($a &lt; $b &amp;&amp; $a &lt; $c &amp;&amp; $a &lt; $d) { <br />    $l1 = $a;<br />} elseif ($b &lt; $a &amp;&amp; $b &lt; $c &amp;&amp; $b &lt; $d) { <br />    $l1 = $b;<br />} elseif ($c &lt; $a &amp;&amp; $c &lt; $b &amp;&amp; $c &lt; $d) { <br />    $l1 = $c;<br />} else { <br />    $l1 = $d;<br />}<br /><br />// Szukamy największej<br />$l4 = $a;<br />if ($b &gt; $l4) { $l4 = $b; }  <br />if ($c &gt; $l4) { $l4 = $c; }  <br />if ($d &gt; $l4) { $l4 = $d; }	 <br /><br />// Szukamy dwóch środkowych<br />$m2 = null;<br />if ($a != $l1 &amp;&amp; $a != $l4) {<br />    $m1 = $a;	<br />    $m2 = empty($m2) ? $a : $m2;<br />}<br />if ($b != $l1 &amp;&amp; $b != $l4) {<br />    $m1 = $b;	<br />    $m2 = empty($m2) ? $b : $m2;<br />}<br />if ($c != $l1 &amp;&amp; $c != $l4) {<br />    $m1 = $c;	<br />    $m2 = empty($m2) ? $c : $m2;<br />}<br />if ($d != $l1 &amp;&amp; $d != $l4) { <br />    $m1 = $d;<br />}<br /><br />$l2 = ($m1 &gt; $m2) ? $m2 : $m1;<br />$l3 = ($m1 &lt; $m2) ? $m2 : $m1;<br /><br />echo "Liczby posortowane: $l4, $l3, $l2, $l1";</pre>



<p class="wp-block-paragraph"><strong>Zadanie 6:</strong> Napisz program potrafiący rozwiązywać równanie kwadratowe: y = ax<sup>2</sup> + bx + c. Przypominamy, że ilość rozwiązań zależy od wartości tzw. współczynnika Δ (Δ = b<sup>2</sup> − 4ac).</p>



<h5 class="wp-block-heading">Rozwiązanie:</h5>



<pre class="wp-block-preformatted prettyprint">echo "&lt;u&gt;Zadanie 6: Napisz skrypt, obliczający pierwiastki trójmianu kwadratowego ax&lt;sup&gt;2&lt;/sup&gt; + bx + c = 0.	Za obliczanie pierwiastka kwadratowego odpowiada funkcja sqrt(\$zmienna)&lt;/u&gt;&lt;/br&gt;&lt;/br&gt;";	<br />$a = 1; <br />$b = 2;<br />$c = 1;<br />$delta = $b * $b - 4 * $a * $c; //obliczamy wg wzoru<br />if ($delta &gt; 0)<br />{<br />	$x1 = (-$b - sqrt($delta)) / (2 * $a); //sqrt() pierwiastek kwadratowy<br />	$x2 = (-$b + sqrt($delta)) / (2 * $a);<br />	echo ' posiada dwa pierwiastki x1 = '.$x1.', x2 = '.$x2;<br />}<br />else if ($delta == 0)<br />{<br />	$x = -$b / 2 * $a;<br />	echo ' posiada jeden pierwiastek x = '.$x;<br />}<br />else echo ' nie posiada pierwiastków';<br /></pre>



<p class="wp-block-paragraph"><strong>Zadanie 7:</strong> Zrealizuj kalkulator, który dla zadanych liczb w zależności od wartości zmiennej $wybor wykonuje: mnożenie, dzielenie, odejmowanie, dodawanie. Użyj instrukcji &#8222;switch&#8221;.</p>



<h5 class="wp-block-heading">Rozwiązanie:</h5>



<pre class="wp-block-preformatted prettyprint">echo "&lt;u&gt;Zadanie 7: Kalkulator&lt;/u&gt;&lt;br&gt;&lt;br&gt;"; <br />$liczba1 = 4;<br />$liczba2 = 2;<br />$wybor = '/';<br /><br />switch ($wybor) {<br />    case "+":<br />        echo $liczba1 + $liczba2;<br />        break;<br />    case "-":<br />        echo $liczba1 - $liczba2;<br />        break;<br />    case "*":<br />        echo $liczba1 * $liczba2;<br />        break;<br />    case "/":<br />        if ($liczba2 != 0) {<br />            echo $liczba1 / $liczba2;<br />        } else {<br />            echo "Błąd: dzielenie przez zero!";<br />        }<br />        break;<br />    default:<br />        echo "Nieznana operacja";<br />        break;<br />}<br /><br />//rozwiązanie z match<br />$wynik = match($wybor) {<br />    "+" =&gt; $liczba1 + $liczba2,<br />    "-" =&gt; $liczba1 - $liczba2,<br />    "*" =&gt; $liczba1 * $liczba2,<br />    "/" =&gt; $liczba2 != 0 ? $liczba1 / $liczba2 : "Błąd: dzielenie przez zero!",<br />    default =&gt; "Nieznana operacja"<br />};<br />echo $wynik;</pre>



<p class="wp-block-paragraph"><strong>Zadanie 8:</strong> Napisz program, który dla danego punktu na płaszczyźnie sprawdzi, w której ćwiartce układu współrzędnych się on znajduje. Może jednak być tak, że punkt nie znajduje się w żadnej ćwiartce – leży na jednej z osi lub w środku układu współrzędnych. Wówczas program powinien to stwierdzić. Na wejściu znajdują się dwie liczby całkowite oddzielone spacją, x i y(−1 000 000 000≤x, y≤1 000 000 000), oznaczające współrzędne danego punktu. Jeżeli podany punkt nie leży na żadnej z osi, Twój program powinien wypisać: I, II, III lub IV, w przypadku gdy punkt należy do, odpowiednio, pierwszej, drugiej, trzeciej lub czwartej ćwiartki układu współrzędnych. Jeżeli punkt leży w środku układu współrzędnych, program powinien wypisać liczbę 0. W przeciwnym razie, program powinien wypisać OX (duże O i duże X), jeśli punkt leży na osi X, a OY – jeśli punkt leży na osi Y.<br />Przykład<br />Dla danych wejściowych:<br />5 7<br />poprawnym wynikiem jest:<br />I<br />a dla danych wejściowych:<br />0 -1000000000<br />poprawnym wynikiem jest:<br />OY<br />natomiast dla danych wejściowych:<br />0 0</p>



<p class="wp-block-paragraph"><strong>Zadanie 9:</strong> Twoim zadaniem jest stwierdzić, czy z trzech odcinków o podanych długościach można zbudować trójkąt o dodatnim polu. Pierwszy i jedyny wiersz wejścia zawiera trzy liczby naturalne a,b,c(1≤a, b, c≤1 000 000 000), oddzielone spacjami. Liczby te oznaczają długości trzech odcinków. Twój program powinien wypisać jedno słowo TAK lub NIE, w zależności od tego, czy z odcinków o długościach takich jak na wejściu można zbudować niezdegenerowany trójkąt, czyli trójkąt o dodatnim polu.<br />Przykład<br />Dla danych wejściowych:<br />8 7 5<br />poprawnym wynikiem jest:<br />TAK<br />a dla danych wejściowych:<br />1 10 2<br />poprawnym wynikiem jest:<br />NIE<br />oraz dla danych wejściowych:<br />4 4 8<br />poprawnym wynikiem jest:<br />NIE</p>



<div><strong>Zadanie 10:</strong> Napisz instrukcję switch wyświetlającą na podstawie zmiennej całkowitej &#8222;nr&#8221; nazwę miesiąca słownie.</div>



<div>
<div><strong>Zadanie 11:</strong> Napisz instrukcje która na podstawie zmiennej całkowitej ocena wyświetla jedna z informacji: brak promocji do następnej klasy, promocja do następnej klasy, promocja z oceną celującą.</div>
</div>



<div>
<div><strong>Zadanie 12:</strong> Napisz instrukcję switch, która dla przekazanej jako parametr całkowity oceny wyświetli ją słownie.</div>
</div>



<div>
<div><strong>Zadanie 13:</strong> Napisz instrukcję switch, która wczytuje kwotę w złotych, a następnie przelicza ją na taka walutę jaką wybierze użytkownik: funty, dolary, euro&#8230;.</div>
</div>



<div><strong>Zadanie 14:</strong> Napisz instrukcję switch, która przelicza metry na inne jednostki miary.</div>
<div> </div>
<div><strong style="font-size: revert; color: initial;">Zadanie 15:</strong><span style="font-size: revert; color: initial;"> Napisz skrypt, który sprawdzi, czy zmienna $x jest większa od liczby 20 (użyj instrukcji warunkowej if)</span></div>
<div>
<p><strong>Zadanie 16:</strong> Napisz skrypt, który sprawdzi, czy zmienna $z jest liczbą trzycyfrową (użyj instrukcji warunkowej if)</p>
<p><strong>Zadanie 17:</strong> Napisz skrypt, który w zależności od wartości zmiennej $age umieszcza odpowiedni napis na stronie:</p>
<p>• jeżeli $wiek mniejszy od 18, wyświetl: &#8222;Jeszcze nie możesz głosować&#8221;<br />• jeżeli $wiek większy lub równy 18, wyświetl: &#8222;Możesz tylko głosować&#8221;<br />• jeżeli $wiek większy lub równy 21, wyświetl: &#8222;Możesz głosować i kandydować do Sejmu&#8221;<br />• jeżeli $wiek większy lub równy 30, wyświetl: &#8222;Możesz głosować i kandydować do Sejmu i Senatu&#8221;<br />• jeżeli $wiek większy lub równy 35, wyświetl: &#8222;Możesz głosować, kandydować do Sejmu i Senatu oraz<br />na Prezydenta&#8221;<br />Zadanie zrealizuj za pomocą instrukcji warunkowej if oraz Switch</p>
<p><strong>Zadanie 18:</strong> Napisz skrypt, używając instrukcji switch, który umieszcza na stronie odpowiednią liczbę znaków + (plus) w zależności od wartości zmiennej $ile:</p>
<ul>
<li>jeżeli $ile równe 1: wyświetl: +</li>
<li>jeżeli $ile równe 2: wyświetl: ++</li>
<li>jeżeli $ile równe 3: wyświetl: +++</li>
<li>&#8230;</li>
<li>jeżeli $ile równe 9: wyświetl: +++++++++</li>
<li>jeżeli $ile mniejsze od 1 lub większe od 9: wyświetl: &#8222;Wartość poza zakresem&#8221;</li>
</ul>
<p><strong>Zadanie 19:</strong> Napisz skrypt, używając instrukcji switch, który umieszcza na stronie napis z numerem kwartału roku w od zmiennej $miesiac:</p>
<ul>
<li>jeżeli $miesiac równe 1,2, lub 3: wyświetl: &#8222;Kwartał I&#8221;</li>
<li>jeżeli $miesiac równe 4,5, lub 6: wyświetl: &#8222;Kwartał II&#8221;</li>
<li>jeżeli $miesiac równe 7,8, lub 9: wyświetl: &#8222;Kwartał III&#8221;</li>
<li>jeżeli $miesiac równe 10,11, lub 12: wyświetl: &#8222;Kwartał IV&#8221;</li>
<li>jeżeli $miesiac mniejsze od 1 lub większe od 12: wyświetl: &#8222;Błędny numer miesiąca&#8221;</li>
</ul>
</div>


<p>


<h1 id="TaskQuest" class="wp-block-heading">TaskQuest — Twój projekt na cały semestr</h1>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary><strong>KARTA PRACY</strong></summary>
<h1 class="wp-block-heading">Karta pracy</h1>



</details></p><p><strong>Projekt: TaskQuest</strong> — grywalizowana aplikacja do zarządzania zadaniami. Użytkownik loguje się, dodaje zadania, za ich wykonanie zdobywa punkty XP, awansuje na poziomy, zdobywa odznaki i widzi swoją pozycję w rankingu klasy. Każda lekcja rozbudowuje tę samą aplikację o nową funkcję.</p>



<h2 class="wp-block-heading">PHP — instrukcje warunkowe, wybór, operator warunkowy</h2>



<h3 class="wp-block-heading">Cel lekcji</h3>



<p class="wp-block-paragraph">Nauczyć aplikację podejmować decyzje na podstawie danych.</p>



<h3 class="wp-block-heading">Co dziś budujesz</h3>



<p class="wp-block-paragraph">Logikę awansu na poziom oraz tytuły zależne od poziomu.</p>



<h3 class="wp-block-heading">Ważna uwaga o progu poziomu</h3>



<p class="wp-block-paragraph">Skoro $xp cały czas rośnie i się nie resetuje, to próg potrzebny do <strong>kolejnego</strong> poziomu też musi rosnąć — inaczej po awansie na poziom 2 użytkownik z 100 XP awansowałby na poziom 3 już przy 101 XP, co byłoby za łatwe. Dlatego próg do następnego poziomu liczymy jako $poziom * XP_NA_POZIOM (poziom 1→2 potrzeba 100 XP, poziom 2→3 potrzeba 200 XP, itd.).</p>



<p class="wp-block-paragraph"><strong>Ograniczenie tej wersji:</strong> pojedynczy if sprawdza próg i awansuje tylko o <strong>jeden</strong> poziom na raz. Jeśli ktoś zdobędzie od razu bardzo dużo XP i „przeskoczy” dwa progi naraz, ten kod tego nie złapie w jednym uruchomieniu. To celowe uproszczenie — w lekcji 5 (pętle) zamienimy ten if na while, żeby awansować użytkownika o tyle poziomów, ile faktycznie mu się należy, za jednym razem.</p>



<h3 class="wp-block-heading">Kroki do wykonania</h3>



<ol class="wp-block-list">
<li>Oblicz próg kolejnego poziomu: $progNastepnegoPoziomu = $poziom * XP_NA_POZIOM;.</li>



<li>Napisz warunek if: jeśli $xp &gt;= $progNastepnegoPoziomu, zwiększ $poziom o 1 i wyświetl komunikat „Awansowałeś!”.</li>



<li>Za pomocą switch przypisz użytkownikowi tytuł zależny od poziomu, np. 1 = Nowicjusz, 2 = Wojownik, 3 i więcej = Mistrz. Wyświetl tytuł użytkownika &#8211; od Ciebie zależy gdzie go umieścisz.</li>



<li>Zdefiniuj zmienną $wykonalDzisiajZadanie — na razie ustaw ją ręcznie na true albo false, tylko po to, żeby przetestować działanie operatora warunkowego (prawdziwe sprawdzanie, czy użytkownik był dziś aktywny, zrobimy dopiero w lekcji 7, gdy poznamy obsługę dat).</li>



<li>Za pomocą operatora warunkowego (?: lub ??) wyświetl na podstawie $wykonalDzisiajZadanie krótką etykietę statusu: „Aktywny” albo „Nieaktywny”.</li>



<li><strong>Zaktualizuj</strong> <strong>$procentPostepu</strong> <strong>z lekcji 3</strong> — dotychczasowy wzór działał tylko dla poziomu 1. Teraz, gdy próg jest dynamiczny, policz procent postępu <em>w obrębie aktualnego poziomu</em>: $procentPostepu = (($xp &#8211; ($poziom &#8211; 1) * XP_NA_POZIOM) / XP_NA_POZIOM) * 100;. Od teraz w całym projekcie używamy tylko tej, uogólnionej wersji.</li>



<li>Przetestuj różne wartości $xp (w tym taką, która przeskakuje próg) oraz obie wartości $wykonalDzisiajZadanie, żeby zobaczyć różne komunikaty.</li>
</ol>



<h3 class="wp-block-heading">Podpowiedzi / fragmenty kodu</h3>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;"></code><code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;?php</code>$progNastepnegoPoziomu = $poziom * XP_NA_POZIOM;
if ($xp &gt;= $progNastepnegoPoziomu) {
    $poziom++;
    echo "Awansowałeś na poziom $poziom!";
}
switch ($poziom) {
    case 1:
        $tytul = "Nowicjusz";
        break;
    case 2:
        $tytul = "Wojownik";
        break;
    default:
        $tytul = "Mistrz";
}
// Tymczasowo ustawiane ręcznie - w lekcji 7 zastąpimy to sprawdzeniem daty
$wykonalDzisiajZadanie = true;
$status = $wykonalDzisiajZadanie ? "Aktywny" : "Nieaktywny";
echo "Status: $status";
// Uogólniona wersja procentu postępu - zastępuje wzór z lekcji 3
$procentPostepu = (($xp - ($poziom - 1) * XP_NA_POZIOM) / XP_NA_POZIOM) * 100;

<code class="prettyprint lang-sql" style="font-size: 0.85em;">?&gt;</code></pre>



<h3 class="wp-block-heading">Do samodzielnego sprawdzenia</h3>



<ul class="wp-block-list">
<li>☐ Próg kolejnego poziomu jest liczony wzorem ($poziom * XP_NA_POZIOM), a nie sztywną liczbą.</li>



<li>☐ Zmiana wartości $xp faktycznie zmienia poziom i tytuł na stronie.</li>



<li>☐ Rozumiem i potrafię wyjaśnić, dlaczego pojedynczy if nie obsłuży awansu o dwa poziomy naraz.</li>



<li>☐ switch obsługuje co najmniej 3 przypadki plus default.</li>



<li>☐ Etykieta statusu poprawnie zmienia się w zależności od $wykonalDzisiajZadanie.</li>
</ul>



<h3 class="wp-block-heading">Pytania kontrolne</h3>



<ol class="wp-block-list">
<li>Dlaczego próg kolejnego poziomu musi rosnąć wraz z poziomem, a nie może być stałą liczbą?</li>



<li>Co się stanie w powyższym kodzie, jeśli użytkownik z poziomu 1 (próg 100) zdobędzie od razu 250 XP? Ile poziomów awansuje po jednym uruchomieniu skryptu i dlaczego?</li>



<li>Kiedy lepiej użyć switch zamiast wielu if/elseif?</li>



<li>Co robi operator ?? i czym różni się od ?:?</li>
</ol>




<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">PODSUMOWANIE LEKCJI</h1>



<h1 id="dodatek" class="wp-block-heading">W skrócie</h1>



<ul class="wp-block-list">
<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">if</code> sprawdza warunki <strong>po kolei, od góry</strong>. Wykonuje się <strong>tylko pierwszy</strong> spełniony blok – kolejne <code class="prettyprint lang-sql" style="font-size: 0.85em;">elseif</code> i <code class="prettyprint lang-sql" style="font-size: 0.85em;">else</code> są pomijane. Dlatego przy przedziałach (punkty, wiek, XP) kolejność warunków ma znaczenie.</li>



<li>W warunku porównujemy przez <code class="prettyprint lang-sql" style="font-size: 0.85em;">==</code> lub <code class="prettyprint lang-sql" style="font-size: 0.85em;">===</code>. Pojedyncze <code class="prettyprint lang-sql" style="font-size: 0.85em;">=</code> to <strong>przypisanie</strong> – kod się uruchomi, ale zrobi coś innego, niż chcesz.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code> porównuje luźno (<code class="prettyprint lang-sql" style="font-size: 0.85em;">==</code>) i bez <code class="prettyprint lang-sql" style="font-size: 0.85em;">break</code> „przelatuje” do kolejnych <code class="prettyprint lang-sql" style="font-size: 0.85em;">case</code> (fall-through). <code class="prettyprint lang-sql" style="font-size: 0.85em;">default</code> wykonuje się, gdy nic nie pasuje.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code> porównuje ściśle (<code class="prettyprint lang-sql" style="font-size: 0.85em;">===</code>) – <code class="prettyprint lang-sql" style="font-size: 0.85em;">"5"</code> (tekst) to nie to samo co <code class="prettyprint lang-sql" style="font-size: 0.85em;">5</code> (liczba). Nie potrzebuje <code class="prettyprint lang-sql" style="font-size: 0.85em;">break</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code> <strong>zwraca wartość</strong> – zapisujesz ją do zmiennej albo od razu wyświetlasz. Po <code class="prettyprint lang-sql" style="font-size: 0.85em;">=&gt;</code> może być tylko <strong>jedno wyrażenie</strong>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code> bez <code class="prettyprint lang-sql" style="font-size: 0.85em;">default</code>, który nie znajdzie dopasowania, kończy skrypt błędem <code class="prettyprint lang-sql" style="font-size: 0.85em;">UnhandledMatchError</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">match(true)</code> pozwala sprawdzać przedziały (<code class="prettyprint lang-sql" style="font-size: 0.85em;">$wiek &lt; 18 =&gt; ...</code>) – wygrywa pierwszy prawdziwy warunek.</li>



<li>Operator warunkowy <code class="prettyprint lang-sql" style="font-size: 0.85em;">warunek ? A : B</code> to skrócone <code class="prettyprint lang-sql" style="font-size: 0.85em;">if…else</code>, które <strong>zwraca wartość</strong>. Stosuj go do prostych decyzji, a nie do rozbudowanej logiki.</li>



<li>Zagnieżdżony operator warunkowy w PHP 8 <strong>musi mieć nawiasy</strong> wokół wewnętrznego wyrażenia. Zapis <code class="prettyprint lang-sql" style="font-size: 0.85em;">a ? b : c ? d : e</code> bez nawiasów kończy się błędem krytycznym. Przy wielu przedziałach czytelniejsze jest <code class="prettyprint lang-sql" style="font-size: 0.85em;">if/elseif</code> albo <code class="prettyprint lang-sql" style="font-size: 0.85em;">match(true)</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">??</code> zwraca lewą stronę, jeśli zmienna <strong>istnieje i nie jest <code class="prettyprint lang-sql" style="font-size: 0.85em;">null</code></strong>, w przeciwnym razie prawą. Nie reaguje na <code class="prettyprint lang-sql" style="font-size: 0.85em;">0</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">""</code> czy <code class="prettyprint lang-sql" style="font-size: 0.85em;">false</code> – dla nich zwraca lewą stronę.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;=&gt;</code> zwraca <code class="prettyprint lang-sql" style="font-size: 0.85em;">-1</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">0</code> lub <code class="prettyprint lang-sql" style="font-size: 0.85em;">1</code> – nie <code class="prettyprint lang-sql" style="font-size: 0.85em;">true</code>/<code class="prettyprint lang-sql" style="font-size: 0.85em;">false</code>.</li>



<li>Składnia alternatywna (<code class="prettyprint lang-sql" style="font-size: 0.85em;">:</code> + <code class="prettyprint lang-sql" style="font-size: 0.85em;">endif;</code> / <code class="prettyprint lang-sql" style="font-size: 0.85em;">endswitch;</code>) działa tak samo jak klamry – różni się tylko zapisem.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Co trzeba umieć na INF.03?</h2>



<ul class="wp-block-list">
<li>napisać instrukcję <code class="prettyprint lang-sql" style="font-size: 0.85em;">if / elseif / else</code> dla podanego opisu słownego („jeżeli…, w przeciwnym razie…”),</li>



<li>ustawić warunki w poprawnej kolejności przy sprawdzaniu przedziałów,</li>



<li>połączyć kilka warunków operatorami <code class="prettyprint lang-sql" style="font-size: 0.85em;">&amp;&amp;</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">||</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">!</code>,</li>



<li>użyć wartości domyślnej, gdy dane nie zostały przesłane: <code class="prettyprint lang-sql" style="font-size: 0.85em;">$_GET['klucz'] ?? wartość</code> lub zapis z <code class="prettyprint lang-sql" style="font-size: 0.85em;">isset()</code> i operatorem warunkowym (oba zapisy są pokazane w lekcji),</li>



<li>rozpoznać błąd <code class="prettyprint lang-sql" style="font-size: 0.85em;">=</code> zamiast <code class="prettyprint lang-sql" style="font-size: 0.85em;">==</code> w warunku,</li>



<li>czytać cudzy kod z <code class="prettyprint lang-sql" style="font-size: 0.85em;">if</code> i <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code> i przewidzieć jego wynik.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Minimum, które powinno wejść w pamięć</h2>



<p class="wp-block-paragraph">Jeżeli masz zapamiętać tylko kilka rzeczy z tej lekcji, zapamiętaj te:</p>



<ol class="wp-block-list">
<li>W warunku <code class="prettyprint lang-sql" style="font-size: 0.85em;">==</code> albo <code class="prettyprint lang-sql" style="font-size: 0.85em;">===</code>, <strong>nigdy</strong> <code class="prettyprint lang-sql" style="font-size: 0.85em;">=</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">if/elseif</code> – wykonuje się tylko pierwszy spełniony warunek. Przedziały sprawdzaj od najbardziej szczegółowego (np. od największego progu).</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code> – każdy <code class="prettyprint lang-sql" style="font-size: 0.85em;">case</code> kończ <code class="prettyprint lang-sql" style="font-size: 0.85em;">break;</code>, na końcu <code class="prettyprint lang-sql" style="font-size: 0.85em;">default</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code> – ścisłe porównanie, zwraca wartość, kończy się średnikiem <code class="prettyprint lang-sql" style="font-size: 0.85em;">};</code>, dodawaj <code class="prettyprint lang-sql" style="font-size: 0.85em;">default</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">$x = warunek ? "tak" : "nie";</code> – jedna decyzja, jedna linia.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">$id = $_GET['id'] ?? 6;</code> – wartość domyślna, gdy brak danych.</li>



<li>Zagnieżdżony operator warunkowy tylko z nawiasami – albo zamień go na <code class="prettyprint lang-sql" style="font-size: 0.85em;">if/elseif</code>.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Ściągawka – najważniejsze polecenia i składnia</h2>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">// if / elseif / else
if ($xp &gt;= 200) {
    // ...
} elseif ($xp &gt;= 100) {
    // ...
} else {
    // ...
}

// switch – luźne porównanie (==), potrzebny break
switch ($poziom) {
    case 1:
        $tytul = "Nowicjusz";
        break;
    case 2:
        $tytul = "Wojownik";
        break;
    default:
        $tytul = "Mistrz";
}

// match – ścisłe porównanie (===), zwraca wartość
$tytul = match ($poziom) {
    1 =&gt; "Nowicjusz",
    2 =&gt; "Wojownik",
    3, 4, 5 =&gt; "Mistrz",      // kilka wartości po przecinku
    default =&gt; "Legenda",
};

// match(true) – przedziały
$kategoria = match (true) {
    $wiek &lt; 18 =&gt; "niepełnoletni",
    default =&gt; "pełnoletni",
};

// operator warunkowy
$status = $aktywny ? "Aktywny" : "Nieaktywny";

// zagnieżdżony – tylko z nawiasami (PHP 8)
$opis = $xp &gt;= 200 ? "dużo" : ($xp &gt;= 100 ? "średnio" : "mało");

// ?? – wartość domyślna, gdy brak / null
$id = $_GET&#91;'id'] ?? 6;

// &lt;=&gt; – zwraca -1, 0 lub 1
echo 3 &lt;=&gt; 7;   // -1

// składnia alternatywna
if ($a == 5):
    echo "pięć";
else:
    echo "nie pięć";
endif;</code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Konstrukcja</th><th>Porównanie</th><th>Zwraca wartość</th><th><code class="prettyprint lang-sql" style="font-size: 0.85em;">break</code></th><th>Kiedy</th></tr></thead><tbody><tr><td><code class="prettyprint lang-sql" style="font-size: 0.85em;">if/elseif/else</code></td><td>dowolny warunek</td><td>nie</td><td>–</td><td>przedziały, złożone warunki, kilka instrukcji w bloku</td></tr><tr><td><code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code></td><td><code class="prettyprint lang-sql" style="font-size: 0.85em;">==</code></td><td>nie</td><td>tak</td><td>wiele konkretnych wartości, kilka instrukcji w <code class="prettyprint lang-sql" style="font-size: 0.85em;">case</code></td></tr><tr><td><code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code></td><td><code class="prettyprint lang-sql" style="font-size: 0.85em;">===</code></td><td>tak</td><td>nie</td><td>przypisanie wartości zależnej od konkretnej wartości</td></tr><tr><td><code class="prettyprint lang-sql" style="font-size: 0.85em;">? :</code></td><td>dowolny warunek</td><td>tak</td><td>–</td><td>prosta decyzja „albo–albo”</td></tr><tr><td><code class="prettyprint lang-sql" style="font-size: 0.85em;">??</code></td><td>czy istnieje i nie <code class="prettyprint lang-sql" style="font-size: 0.85em;">null</code></td><td>tak</td><td>–</td><td>wartość domyślna</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Quiz – sprawdź się</h2>



<p class="wp-block-paragraph"><strong>1.</strong> Uczeń ma 95 punktów. Co wyświetli kod? Jak go poprawić, żeby wyświetlił „bardzo dobry”?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$punkty = 95;
if ($punkty &gt;= 50) echo "dostateczny";
elseif ($punkty &gt;= 75) echo "dobry";
elseif ($punkty &gt;= 90) echo "bardzo dobry";</code></pre>



<p class="wp-block-paragraph"><strong>2.</strong> Dlaczego ten kod zawsze wyświetla „Admin”, niezależnie od wartości <code class="prettyprint lang-sql" style="font-size: 0.85em;">$rola</code>? Jaka będzie wartość <code class="prettyprint lang-sql" style="font-size: 0.85em;">$rola</code> po wykonaniu kodu?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$rola = "gość";
if ($rola = "admin") {
    echo "Admin";
}</code></pre>



<p class="wp-block-paragraph"><strong>3.</strong> Co zostanie wyświetlone? Co należy dopisać, aby wyświetlało się tylko „Wojownik”?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$poziom = 2;
switch ($poziom) {
    case 1: echo "Nowicjusz ";
    case 2: echo "Wojownik ";
    case 3: echo "Mistrz ";
    default: echo "Nieznany";
}</code></pre>



<p class="wp-block-paragraph"><strong>4.</strong> Co wyświetli <code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code>, a co wyświetliłby <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code> z tym samym <code class="prettyprint lang-sql" style="font-size: 0.85em;">case 5</code>? Z czego wynika różnica?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$ocena = "5";
echo match ($ocena) {
    5 =&gt; "bardzo dobry",
    default =&gt; "inna",
};</code></pre>



<p class="wp-block-paragraph"><strong>5.</strong> Co się stanie po uruchomieniu tego kodu? Jak to naprawić?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$dzien = 8;
$nazwa = match ($dzien) {
    1 =&gt; "poniedziałek",
    2 =&gt; "wtorek",
    // ... pozostałe dni ...
    7 =&gt; "niedziela",
};</code></pre>



<p class="wp-block-paragraph"><strong>6.</strong> Uzupełnij lukę, aby dla soboty i niedzieli wynikiem było „weekend”.</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$typ = match ($dzien) {
    __________ =&gt; "weekend",
    default =&gt; "dzień roboczy",
};</code></pre>



<p class="wp-block-paragraph"><strong>7.</strong> Co zostanie wyświetlone?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$temp = 18;
echo match (true) {
    $temp &lt; 0 =&gt; "mróz",
    $temp &lt; 15 =&gt; "zimno",
    $temp &lt; 25 =&gt; "ciepło",
    default =&gt; "upał",
};</code></pre>



<p class="wp-block-paragraph"><strong>8.</strong> Zapisz ten kod w jednej linii za pomocą operatora warunkowego.</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">if ($xp &gt;= 100) {
    $info = "awans";
} else {
    $info = "brak awansu";
}</code></pre>



<p class="wp-block-paragraph"><strong>9.</strong> Co zostanie wyświetlone?</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$imie = null;
echo $imie ?? "Gość";
echo "&lt;br&gt;";
$wiek = 0;
echo $wiek ?? 18;</code></pre>



<p class="wp-block-paragraph"><strong>10.</strong> Napisz jedną linię kodu, która zapisze do zmiennej <code class="prettyprint lang-sql" style="font-size: 0.85em;">$idKontynentu</code> wartość przesłaną metodą GET w parametrze <code class="prettyprint lang-sql" style="font-size: 0.85em;">kontynent</code>, a jeżeli parametr nie został przesłany – wartość <code class="prettyprint lang-sql" style="font-size: 0.85em;">6</code>. Podaj dwa sposoby.</p>



<p class="wp-block-paragraph"><strong>11.</strong> Ten kod w PHP 8 kończy się błędem krytycznym. Dlaczego? Popraw go.</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">$opis = $xp &gt;= 200 ? "dużo" : $xp &gt;= 100 ? "średnio" : "mało";</code></pre>



<p class="wp-block-paragraph"><strong>12.</strong> Która wersja jest poprawna?</p>



<p class="wp-block-paragraph">a)</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">if ($a == 5):
    echo "pięć";
end if;</code></pre>



<p class="wp-block-paragraph">b)</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">if ($a == 5):
    echo "pięć";
endif;</code></pre>



<p class="wp-block-paragraph">c)</p>



<pre class="wp-block-code prettyprint lang-sql has-small-font-size" style="font-size: 0.85em;"><code class="prettyprint lang-sql" style="font-size: 0.85em;">if ($a == 5):
    echo "pięć";
}</code></pre>



<p class="wp-block-paragraph"><strong>13.</strong> Co wyświetli <code class="prettyprint lang-sql" style="font-size: 0.85em;">echo 3 &lt;=&gt; 7;</code>?</p>



<p class="wp-block-paragraph"><strong>14.</strong> Kiedy lepiej użyć <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code> zamiast <code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code>? Odpowiedz jednym zdaniem.</p>



<p class="wp-block-paragraph"><strong>15. (TaskQuest)</strong> Użytkownik ma <code class="prettyprint lang-sql" style="font-size: 0.85em;">$poziom = 1</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">XP_NA_POZIOM = 100</code> i zdobył od razu <code class="prettyprint lang-sql" style="font-size: 0.85em;">$xp = 250</code>. Uruchamiasz kod z karty pracy (próg, <code class="prettyprint lang-sql" style="font-size: 0.85em;">if</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code>, nowy wzór na <code class="prettyprint lang-sql" style="font-size: 0.85em;">$procentPostepu</code>). Jakie wartości będą miały <code class="prettyprint lang-sql" style="font-size: 0.85em;">$poziom</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">$tytul</code> i <code class="prettyprint lang-sql" style="font-size: 0.85em;">$procentPostepu</code>? Co ten wynik mówi o ograniczeniu pojedynczego <code class="prettyprint lang-sql" style="font-size: 0.85em;">if</code>?</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary><strong>Odpowiedzi</strong></summary>
<ol class="wp-block-list">
<li>Wyświetli „dostateczny”, bo pierwszy warunek (<code class="prettyprint lang-sql" style="font-size: 0.85em;">&gt;= 50</code>) jest już spełniony i reszta jest pomijana. Poprawka: sprawdzać od największego progu – <code class="prettyprint lang-sql" style="font-size: 0.85em;">&gt;= 90</code>, potem <code class="prettyprint lang-sql" style="font-size: 0.85em;">&gt;= 75</code>, potem <code class="prettyprint lang-sql" style="font-size: 0.85em;">&gt;= 50</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">=</code> to przypisanie, nie porównanie. Do <code class="prettyprint lang-sql" style="font-size: 0.85em;">$rola</code> trafia <code class="prettyprint lang-sql" style="font-size: 0.85em;">"admin"</code>, a niepusty tekst w warunku jest traktowany jako prawda. Po wykonaniu <code class="prettyprint lang-sql" style="font-size: 0.85em;">$rola</code> ma wartość <code class="prettyprint lang-sql" style="font-size: 0.85em;">"admin"</code>. Poprawnie: <code class="prettyprint lang-sql" style="font-size: 0.85em;">if ($rola == "admin")</code>.</li>



<li>„Wojownik Mistrz Nieznany” – brak <code class="prettyprint lang-sql" style="font-size: 0.85em;">break</code>, więc po dopasowaniu <code class="prettyprint lang-sql" style="font-size: 0.85em;">case 2</code> wykonują się wszystkie kolejne bloki. Należy dopisać <code class="prettyprint lang-sql" style="font-size: 0.85em;">break;</code> po każdym <code class="prettyprint lang-sql" style="font-size: 0.85em;">echo</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code> wyświetli „inna”, bo <code class="prettyprint lang-sql" style="font-size: 0.85em;">"5"</code> (string) <code class="prettyprint lang-sql" style="font-size: 0.85em;">!==</code> <code class="prettyprint lang-sql" style="font-size: 0.85em;">5</code> (int). <code class="prettyprint lang-sql" style="font-size: 0.85em;">switch</code> wyświetliłby „bardzo dobry”, bo porównuje luźno (<code class="prettyprint lang-sql" style="font-size: 0.85em;">==</code>).</li>



<li>Błąd krytyczny <code class="prettyprint lang-sql" style="font-size: 0.85em;">UnhandledMatchError</code> – żadna gałąź nie pasuje do 8, a nie ma <code class="prettyprint lang-sql" style="font-size: 0.85em;">default</code>. Naprawa: dodać np. <code class="prettyprint lang-sql" style="font-size: 0.85em;">default =&gt; "błędny numer dnia",</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">"sobota", "niedziela"</code></li>



<li>„ciepło” – pierwszy prawdziwy warunek to <code class="prettyprint lang-sql" style="font-size: 0.85em;">$temp &lt; 25</code>.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">$info = ($xp &gt;= 100) ? "awans" : "brak awansu";</code></li>



<li>„Gość” oraz <code class="prettyprint lang-sql" style="font-size: 0.85em;">0</code>. <code class="prettyprint lang-sql" style="font-size: 0.85em;">??</code> reaguje tylko na <code class="prettyprint lang-sql" style="font-size: 0.85em;">null</code> lub nieistniejącą zmienną – <code class="prettyprint lang-sql" style="font-size: 0.85em;">0</code> to poprawna wartość, więc zostaje wyświetlona.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">$idKontynentu = $_GET['kontynent'] ?? 6;</code><br />albo <code class="prettyprint lang-sql" style="font-size: 0.85em;">$idKontynentu = isset($_GET['kontynent']) ? $_GET['kontynent'] : 6;</code></li>



<li>PHP 8 nie pozwala zagnieżdżać operatora warunkowego bez nawiasów, bo kolejność wykonania byłaby niejednoznaczna. Poprawnie:<br /><code class="prettyprint lang-sql" style="font-size: 0.85em;">$opis = $xp &gt;= 200 ? "dużo" : ($xp &gt;= 100 ? "średnio" : "mało");</code></li>



<li><strong>b</strong> – składnia alternatywna kończy się <code class="prettyprint lang-sql" style="font-size: 0.85em;">endif;</code> (jedno słowo, ze średnikiem).</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">-1</code> (lewa wartość jest mniejsza).</li>



<li>Gdy w danym przypadku trzeba wykonać kilka instrukcji (złożoną logikę), bo po <code class="prettyprint lang-sql" style="font-size: 0.85em;">=&gt;</code> w <code class="prettyprint lang-sql" style="font-size: 0.85em;">match</code> może być tylko jedno wyrażenie.</li>



<li><code class="prettyprint lang-sql" style="font-size: 0.85em;">$poziom = 2</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">$tytul = "Wojownik"</code>, <code class="prettyprint lang-sql" style="font-size: 0.85em;">$procentPostepu = 150</code>. Pojedynczy <code class="prettyprint lang-sql" style="font-size: 0.85em;">if</code> awansuje tylko o jeden poziom, chociaż 250 XP wystarcza na poziom 3 (próg 200). Procent większy niż 100 pokazuje, że użytkownik „utknął” poniżej należnego poziomu – naprawimy to pętlą <code class="prettyprint lang-sql" style="font-size: 0.85em;">while</code> w lekcji 5.</li>
</ol>
</details>
<p>Artykuł <a href="https://kamakaczmarek.net/php-instrukcje-sterujace-instrukcje-warunkowe-wyboru-oraz-operator-warunkowy/">4. PHP &#8211; instrukcje sterujące &#8211; instrukcje warunkowe, wyboru oraz operator warunkowy</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
