operators.xml
[email protected] (Gustav Tiger) Sat, 06 Mar 2004 21:50:31 +0100
| Newsgroups | php.doc.sv |
|---|---|
| Message-ID | <[email protected]> |
-- _________________________________________ Gustav Tiger Bergs Gymnasium Sweden
operators.xml
(text/xml, 26.4 KB)
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.63 $ -->
<chapter id="language.operators">
<title>Operatorer</title>
<simpara>
En operator är någonting som du matar med ett eller flera värden
(eller uttryck på programmeringsjargon) vilket i sin tur resulterar
i ett annat värde (så att konstruktionen själv blir ett uttryck). Du
kan tänka på funktioner eller konstruktioner som returnerar ett värde
(te x print) som operatorer och de som inte returnerar något (te x echo)
som andra saker.
</simpara>
<para>
<!-- unary, termed, ternary ??? nu översatt med en- två- och trevariabels.. -->
Det finns tre typer av operatorer. Först så finns det envariabels-operatorer
som opererar på endast ett värde, till exempel ! (motsattsoperatorn) eller ++
(ökningsoperatorn). Den andra gruppen är tvåvariabels-operatorer. Den här
gruppen innehåller de flesta av operatorerna som PHP stödjer. En lista följer
i sektionen om
<link linkend="language.operators.precedence">Operatorprioritet</link> nedanför.
</para>
<para>
Den tredje gruppen är trevariables-operatorer: ?:. Den bör användas för
att välja mellan två uttryck beroende på ett tredje snarare än att
välja mellan två sattser eller körvägar. Att omge trevaribels-uttryck med
parenteser är en väldigt bra idé.
</para>
<sect1 id="language.operators.precedence">
<title>Operatorprioritet</title>
<para>
Prioritet på en operator säger hur "hårt" den binder samman två
uttryck. Till exempel för uttrycket <literal>1 + 5 * 3</literal>
är svaret <literal>16</literal> och inte <literal>18</literal>
eftersom multiplikationsoperatorn ("*") har en högre prioritet
än additionsoperatorn ("+"). Parenteser kan om det är nödvändigt
användas för att tvinga fram en annan prioritet, till exempel:
<literal>(1 + 5) * 3</literal> utvärderas till <literal>18</literal>.
</para>
<para>
Den följande tabellen listar operatorprioriteten, den operator
med högst prioritet är listad först.
<table>
<title>Operatorprioritet</title>
<tgroup cols="2">
<thead>
<row>
<entry>Associativitet</entry>
<entry>Operatorer</entry>
</row>
</thead>
<tbody>
<row>
<entry>icke-associativ</entry>
<entry>new</entry>
</row>
<row>
<entry>höger</entry>
<entry>[</entry>
</row>
<row>
<entry>höger</entry>
<entry>! ~ ++ -- (int) (float) (string) (array) (object) @</entry>
</row>
<row>
<entry>vänster</entry>
<entry>* / %</entry>
</row>
<row>
<entry>vänster</entry>
<entry>+ - .</entry>
</row>
<row>
<entry>vänster</entry>
<entry><< >></entry>
</row>
<row>
<entry>icke-associativ</entry>
<entry>< <= > >=</entry>
</row>
<row>
<entry>icke-associativ</entry>
<entry>== != === !==</entry>
</row>
<row>
<entry>vänster</entry>
<entry>&</entry>
</row>
<row>
<entry>vänster</entry>
<entry>^</entry>
</row>
<row>
<entry>vänster</entry>
<entry>|</entry>
</row>
<row>
<entry>vänster</entry>
<entry>&&</entry>
</row>
<row>
<entry>vänster</entry>
<entry>||</entry>
</row>
<row>
<entry>vänster</entry>
<entry>? :</entry>
</row>
<row>
<entry>höger</entry>
<entry>
= += -= *= /= .= %= &= |= ^= <<= >>=
</entry>
</row>
<row>
<entry>höger</entry>
<entry>print</entry>
</row>
<row>
<entry>vänster</entry>
<entry>and</entry>
</row>
<row>
<entry>vänster</entry>
<entry>xor</entry>
</row>
<row>
<entry>vänster</entry>
<entry>or</entry>
</row>
<row>
<entry>vänster</entry>
<entry>,</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<note>
<para>
Även om <literal>!</literal> har en högre prioritet än
<literal>=</literal> så tillåter PHP ändå uttryck liknande
de här: <literal>if (!$a = foo())</literal>. I det här fallet
så kommer utmatningen från <literal>foo()</literal> att
stoppas in i <varname>$a</varname>.
</para>
</note>
</sect1>
<sect1 id="language.operators.arithmetic">
<title>Aritmetikoperatorer</title>
<simpara>
Kommer du ihåg de fyra räknesätten från skolan? De här
operatorerna fungerar precis som dem.
</simpara>
<table>
<title>Aritmetikoperatorer</title>
<tgroup cols="3">
<thead>
<row>
<entry>Exempel</entry>
<entry>Namn</entry>
<entry>Resultat</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a + $b</entry>
<entry>Addition</entry>
<entry>Summan av $a och $b.</entry>
</row>
<row>
<entry>$a - $b</entry>
<entry>Subtraktion</entry>
<entry>Skillnaden mellan $a och $b.</entry>
</row>
<row>
<entry>$a * $b</entry>
<entry>Multiplikation</entry>
<entry>Produkten av $a och $b.</entry>
</row>
<row>
<entry>$a / $b</entry>
<entry>Division</entry>
<entry>Differensen av $a och $b.</entry>
</row>
<row>
<entry>$a % $b</entry>
<entry>Modulo</entry>
<entry>Resten vid division av $a och $b.</entry>
</row>
</tbody>
</tgroup>
</table>
<simpara>
Divisionsoperatorn ("/") returnerar alltid ett flyttal,
även om de två operanderna är heltal (eller strängar som
blir konverterade till heltal).
</simpara>
<simpara>
Se också manualsidan för
<link linkend="ref.math">Matematikfunktioner</link>.
</simpara>
<!--
<simpara>
The division operator ("/") returns an integer value (the result
of an integer division) if the two operands are integers (or
strings that get converted to integers) and the quotient is an
integer. If either operand is a floating-point value, or the
operation results in a non-integer value, a floating-point value
is returned.
</simpara>
-->
</sect1>
<sect1 id="language.operators.assignment">
<title>Tilldelningsoperatorer</title>
<simpara>
Den grundläggande tilldelningsoperatorn är "=". Din första reaktion
kan vara att tänka på den som "lika med". Gör inte det. Den betyder
egentligen att den vänstra operanden tilldelas värdet av uttrycket till
höger (den "tilldelas värdet" alltså).
</simpara>
<para>
Värdet av tilldelningsuttrycket är värdet som tilldelas. Alltså
värdet av "$a = 3" är 3. Det tillåter dig att göra lite listiga
saker:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = ($b = 4) + 5; // $a är lika med 9 och $b har blivit tilldelat värdet 4.
?>
]]>
</programlisting>
</informalexample>
</para>
<!-- TODO, translation - oklart? -->
<para>
Som tillägg till den vanliga tilldelningsoperatorn så finns det
"kombinerade operatorer" för alla
<link linkend="language.operators">räkningsoperatorer</link>
och strängoperatorer som låter dig använda ett värde i ett uttryck
och sen sätta dess värde till resultatet av det uttrycket. Ett exempel:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$a += 5; // sätter $a till 8 som om vi hade skrivit: $a = $a + 5;
$b = "Hallå ";
$b .= "där!"; // sätter $b till "Hallå där!" som om vi hade skrivit $b = $b . "där!";
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
<!-- TODO, translation..This may also have relevance if you
need to copy something like a large array inside a tight loop.
hmm?? - varför skulle de vara relevant? -->
Notera att tilldelning kopierar orginalvärdet till den nya
(tilldelning genom värde), så ändringar på den ena påverkar
inte den andra. Det här kan vara relevant om du behöver kopiera
någonting stort, som en stor vektor, inuti en kort loop.
PHP 4 stödjer och tilldelning genom referens genom att använda
syntaxen <computeroutput>$var = &$othervar;</computeroutput>.
Detta fungerar dock inte i PHP 3. 'Tilldelning genom referens'
betyder att båda variablerna pekar på samma data och ingenting
kopieras någonstans. För att lära dig mer om referenser så kan
du läsa<link linkend="language.references">Referenser
förklarade</link>.
</para>
</sect1>
<sect1 id="language.operators.bitwise">
<title>Bitoperatorer</title>
<simpara>
Bitoperatorer låter dig sätta på eller av specifika bits i en integer.
Om både vänster- och högerparametrarna är strängar så kommer bitoperatorerna
att operera på tecknen i strängen.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo 12 ^ 9; // Skriver ut '5'
echo "12" ^ "9"; // Skriver ut backspace-tecknet (ascii 8)
// ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8
echo "hallo" ^ "hello"; // Skriver ut asciivärdena #0 #4 #0 #0 #0
// 'a' ^ 'e' = #4
?>
]]>
</programlisting>
</informalexample>
</para>
<table>
<title>Bitoperatorer</title>
<tgroup cols="3">
<thead>
<row>
<entry>Exempel</entry>
<entry>Namn</entry>
<entry>Resultat</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a & $b</entry>
<entry>Och</entry>
<entry>Bitar som är satta i både $a och $b sätts.</entry>
</row>
<row>
<entry>$a | $b</entry>
<entry>Eller</entry>
<entry>Bitar som är satta i antingen $a eller $b sätts.</entry>
</row>
<row>
<entry>$a ^ $b</entry>
<entry>Exklusivt</entry>
<entry>
Bitar som är satta i $a eller $b men inte i båda sätts.
</entry>
</row>
<row>
<entry>~ $a</entry>
<entry>Inte</entry>
<entry>
Bitar som är satta i $a sätts inte och vice versa.
</entry>
</row>
<row>
<entry>$a << $b</entry>
<entry>Vänsterskiftning</entry>
<entry>
Skiftar bitarna i $a $b steg till vänster (varje steg betyder
"multiplicera med två")
</entry>
</row>
<row>
<entry>$a >> $b</entry>
<entry>Högerskiftning</entry>
<entry>
Skiftar bitarna i $a $b steg till höger (varje steg betyder
"dividera med två")
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<sect1 id="language.operators.comparison">
<title>Jämförelseoperatorer</title>
<simpara>
Jämförelseoperatorer, som deras namn föreslår, låter dig jämföra
två värden. Du kanske också är intresserad att titta på
<link linkend="types.comparisons">typjämförelsetabellerna</link>,
eftersom de visar diverse relevanta jämförelseexempel.
</simpara>
<table>
<title>Jämförelseoperatorer</title>
<tgroup cols="3">
<thead>
<row>
<entry>Exempel</entry>
<entry>Namn</entry>
<entry>Resultat</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a == $b</entry>
<entry>Lika med</entry>
<entry>&true; om $a är lika med $b.</entry>
</row>
<row>
<entry>$a === $b</entry>
<entry>Identiska</entry>
<entry>
&true; om $a är lika med $b och om de är av samma typ.
(enbart PHP 4)
</entry>
</row>
<row>
<entry>$a != $b</entry>
<entry>Inte lika med</entry>
<entry>&true; om $a inte är lika med $b.</entry>
</row>
<row>
<entry>$a <> $b</entry>
<entry>Inte lika med</entry>
<entry>&true; om $a inte är lika med $b.</entry>
</row>
<row>
<entry>$a !== $b</entry>
<entry>Inte identiska</entry>
<entry>
&true; om $a inte är lika med $b eller om det inte är av samma typ.
(enbart PHP 4)
</entry>
</row>
<row>
<entry>$a < $b</entry>
<entry>Mindre än</entry>
<entry>&true; om $a är mindre än $b.</entry>
</row>
<row>
<entry>$a > $b</entry>
<entry>Större än</entry>
<entry>&true; om $a är mindre än $b.</entry>
</row>
<row>
<entry>$a <= $b</entry>
<entry>Mindre eller lika med</entry>
<entry>&true; om $a är mindre eller lika med $b.</entry>
</row>
<row>
<entry>$a >= $b</entry>
<entry>Större eller lika med</entry>
<entry>&true; om $a är större eller lika med $b.</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
<!-- TODO, översättning ternary ??-->
En annan valoperator är "?:"- eller trevariabels-operatorn, som
fungerar lika som i C och många andra språk.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Exempel på användning av trevariabelsoperatorn:
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// Det ovanför är identiskt med det här if/else-sattsen:
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
]]>
</programlisting>
</informalexample>
Uttrycket <literal>(uttr1) ? (uttr2) : (uttr3)</literal>
resulterar i <replaceable>uttr2</replaceable> om
<replaceable>uttr1</replaceable> är &true;, och
<replaceable>uttr3</replaceable> om
<replaceable>uttr1</replaceable> är &false;.
</para>
<para>
Se också <function>strcasecmp</function>,
<function>strcmp</function>,
<link linkend="language.operators.array">Vektoroperatorer</link>,
och på manualsidan om
<link linkend="language.types">Typer</link>.
</para>
</sect1>
<sect1 id="language.operators.errorcontrol">
<title>Felkontrollsoperatorer</title>
<simpara>
PHP stödjer en felkontrollsoperator: snabel-aet (@). När
ett uttryck föregås av ett snabel-a så kommer de eventuella felmeddelandet
som generas av det uttrycket att ignoreras.
</simpara>
<simpara>
Om <link linkend="ini.track-errors">track_errors</link> är
aktiverat så kommer de eventuella felmeddelande som generades
av uttrycket att sparas i variabeln
<link linkend="reserved.variables.phperrormsg">$php_errormsg</link>.
Den här variabeln kommer att skrivas över för varje fel, så kontrollera
tidigt om du vill använda den.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/* Avsiktligt filfel */
$my_file = @file ('ickeexisterande_fil') or
die ("Kunde inte öppna filen: felet var '$php_errormsg'");
// det här fungerar på alla uttryck, inte bara funktioner:
$value = @$cache[$key];
// kommer inte att leverera en felnotis om indexet $key inte existerar.
?>
]]>
</programlisting>
</informalexample>
</para>
<note>
<simpara>
@-operatorn fungerar bara på
<link linkend="language.expressions">uttryck</link>. En enkel regel
är att om du kan ta värdet av någonting så kan du använda @-operatorn
på den. Till exempel så kan du sätta den före variabler, funktioner
och <function>include</function>-anrop, konstanter och så vidare.
Du kan inte sätta det före funktions- eller klassdefinitioner, eller
kontrollstrukturer som <literal>if</literal>, <literal>foreach</literal>
och så vidare.
</simpara>
</note>
<simpara>
Se också <function>error_reporting</function> och manualsektionen om
<link linkend="ref.errorfunc">Felhantering och Loggningsfunktioner</link>.
</simpara>
<note>
<para>
@-operatorn kommer inte att göra så att fel som beror på tolkningsfel
inte visas.
</para>
</note>
<warning>
<para>
@-opertorn gör däremot så att även kritiska fel som avslutar
skriptkörningen inte visas. Det betyder att om du använder "@"
för att inte visa felmeddelanden från en viss funktion och den
inte finns tillgänglig eller har blivit felstavat så kommer
skriptet att dö där utan någon som helst indikering om varför.
</para>
</warning>
</sect1>
<sect1 id="language.operators.execution">
<title>Körningsoperatorer</title>
<para>
PHP stödjer en körningsoperator: grava accenter (``). Det är
alltså inte apostroftecken! PHP kommer att försöka köra innehållet
som ett shell-kommando. Utmatningen kommer att returneras (Den
kommer alltså inte att skrivas ut, utan kan tilldelas en variabel).
Att använda grav accent är samma sak som att använda funktionen
<function>shell_exec</function>.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>
]]>
</programlisting>
</informalexample>
</para>
<note>
<para>
grav accent-operatorn är avaktiverad när &safemode är aktiverat
eller <function>shell_exec</function> är avaktiverad.
</para>
</note>
<para>
Se också manualsektionen om
<link linkend="ref.exec">Programkörningsfunktioner</link>,
<function>popen</function>, <function>proc_open</function>, och
<link linkend="features.commandline">Att använda PHP från kommandoraden</link>.
</para>
</sect1>
<sect1 id="language.operators.increment">
<title>Öknings-/Minskningsoperatorer</title>
<para>
PHP stödjer öknings- och minskingsoperatorer både
för- och efter precis som i C.
</para>
<table>
<title>Öknings-/Minskningsoperatorer</title>
<tgroup cols="3">
<thead>
<row>
<entry>Exempel</entry>
<entry>Namn</entry>
<entry>Effekt</entry>
</row>
</thead>
<tbody>
<row>
<entry>++$a</entry>
<entry>Ökning före</entry>
<entry>Ökar $a med ett och returnerar sen $a.</entry>
</row>
<row>
<entry>$a++</entry>
<entry>Ökning efter</entry>
<entry>Returnerar $a och ökar sen $a med ett.</entry>
</row>
<row>
<entry>--$a</entry>
<entry>Minskning före</entry>
<entry>Minskar $a med ett och returnerar sen $a.</entry>
</row>
<row>
<entry>$a--</entry>
<entry>Minskning efter</entry>
<entry>Returnerar $a och minskar sen $a med ett.</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
Här är några enkla exempel:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo "<h3>Ökning efter</h3>";
$a = 5;
echo "Borde vara 5: " . $a++ . "<br />\n";
echo "Borde vara 6: " . $a . "<br />\n";
echo "<h3>Ökning före</h3>";
$a = 5;
echo "Borde vara 6: " . ++$a . "<br />\n";
echo "Borde vara 6: " . $a . "<br />\n";
echo "<h3>Minskning efter</h3>";
$a = 5;
echo "Borde vara 5: " . $a-- . "<br />\n";
echo "Borde vara 4: " . $a . "<br />\n";
echo "<h3>Minskning före</h3>";
$a = 5;
echo "Borde vara 4: " . --$a . "<br />\n";
echo "Borde vara 4: " . $a . "<br />\n";
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
PHP följer Perl:s och inte C:s standard när man använder räkneoperationer
på teckenvariabler. Till exempel, i Perl så blir 'Z'+1 'AA' medan det i
C blir '[' ( ord('Z') == 90, ord('[') == 91 ).
Ökningsoperatorer kan användas på teckenvariabler men inte minskningsoperatorer.
<example>
<title>Räkneoperatorer på teckenvariabler</title>
<programlisting role="php">
<![CDATA[
<?php
$i = 'W';
for($n=0; $n<6; $n++)
echo ++$i . "\n";
/*
Producerar en utmatning liknande den här:
X
Y
Z
AA
AB
AC
*/
?>
]]>
</programlisting>
</example>
</para>
</sect1>
<sect1 id="language.operators.logical">
<title>Logiska operatorer</title>
<table>
<title>Logiska operatorer</title>
<tgroup cols="3">
<thead>
<row>
<entry>Exempel</entry>
<entry>Namn</entry>
<entry>Resultat</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a and $b</entry>
<entry>Och</entry>
<entry>&true; om både $a och $b är &true;.</entry>
</row>
<row>
<entry>$a or $b</entry>
<entry>Eller</entry>
<entry>&true; om antingen $a eller $b är &true;.</entry>
</row>
<row>
<entry>$a xor $b</entry>
<entry>Exlusivt</entry>
<entry>&true; om antingen $a eller $b men inte båda är &true;.</entry>
</row>
<row>
<entry>! $a</entry>
<entry>Inte</entry>
<entry>&true; om $a inte är &true;.</entry>
</row>
<row>
<entry>$a && $b</entry>
<entry>Och</entry>
<entry>&true; om både $a och $b är &true;.</entry>
</row>
<row>
<entry>$a || $b</entry>
<entry>Eller</entry>
<entry>&true; om antingen $a eller $b är &true;.</entry>
</row>
</tbody>
</tgroup>
</table>
<simpara>
Orsaken till att det finns två olika variationer på "och"- och
"eller"-operatorerna är att de har olika prioritet. (Se
<link linkend="language.operators.precedence">Operatorprioritet</link>.)
</simpara>
</sect1>
<sect1 id="language.operators.string">
<title>Strängoperatorer</title>
<simpara>
<!-- TODO, översättning konkatentering?.. svårt ord att förstå kanske?. -->
Det finns två strängoperatorer. Den första är konkatenteringsoperatorn
('.') som returnerar en ihopsatt sträng av dess högra och vänstra
argument. Den andra är konkantentering- och tilldelningsoperatorn ('.=')
som lägger till argumentet på högra sidan till argumentet på vänster sida.
Läs mer i kapitlet om <link
linkend="language.operators.assignment">Tilldelningsoperatorer</link>.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = "Hej ";
$b = $a . "världen!"; // nu innehåller $b "Hej världen!"
$a = "Hej ";
$a .= "världen!"; // nu innehåller $a "Hej världen!"
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
Se också manualsektionerna om
<link linkend="language.types.string">Strängtyper</link> och
<link linkend="ref.strings">Strängfunktioner</link>.
</para>
</sect1>
<sect1 id="language.operators.array">
<title>Vektoroperatorer</title>
<table>
<title>Vektoroperatorer</title>
<tgroup cols="3">
<thead>
<row>
<entry>Exempel</entry>
<entry>Namn</entry>
<entry>Resultat</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a + $b</entry>
<entry>Sammanslagning</entry>
<entry>Sammanslagning av $a och $b.</entry>
</row>
<row>
<entry>$a == $b</entry>
<entry>Lika med</entry>
<entry>&true; om $a och $b har samma element.</entry>
</row>
<row>
<entry>$a === $b</entry>
<entry>Identiska</entry>
<entry>&true; om $a och $b har samma element och dessa är i samma ordning.</entry>
</row>
<row>
<entry>$a != $b</entry>
<entry>Inte lika med</entry>
<entry>&true; om $a inte är lika med $b.</entry>
</row>
<row>
<entry>$a <> $b</entry>
<entry>Inte lika med</entry>
<entry>&true; om $a inte är lika med $b.</entry>
</row>
<row>
<entry>$a !== $b</entry>
<entry>Icke identiska</entry>
<entry>&true; om $a inte är identiskt med $b.</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
<literal>+</literal>-operatorn lägger till den högra arrayen
till den vänstra, dubbla nycklar skrivs alltså INTE över.
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; // Sammanslagning av $a och $b
echo "Sammanslagning av \$a och \$b: \n";
var_dump($c);
$c = $b + $a; // Sammanslagning av $b och $a
echo "Sammanslagning av \$b och \$a: \n";
var_dump($c);
?>
]]>
</programlisting>
</informalexample>
När det här skriptet körs kommer utmatningen att vara följande:
<screen role="php">
<![CDATA[
Sammanslagning av $a och $b:
array(3) {
["a"]=>
string(5) "apple"
["b"]=>
string(6) "banana"
["c"]=>
string(6) "cherry"
}
Sammanslagning av $b och $a:
array(3) {
["a"]=>
string(4) "pear"
["b"]=>
string(10) "strawberry"
["c"]=>
string(6) "cherry"
}
]]>
</screen>
</para>
<para>
Element i vektorer är lika med varandra bara om de har samma nyckel
och värde.
</para>
<para>
<example>
<title>Jämföra vektorer</title>
<programlisting role="php">
<![CDATA[
<?php
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>
]]>
</programlisting>
</example>
</para>
<para>
Se också manualsektionern för
<link linkend="language.types.array">Vektortypen</link> och
<link linkend="ref.array">Vektorfunktioner</link>.
</para>
</sect1>
<sect1 id="language.operators.type">
<title>Typoperatorer</title>
<para>
PHP har en enda typoperator: <literal>instanceof</literal>.
<literal>instanceof</literal> används för att bestämma om
ett givet objekt är av en specificerad
<link linkend="language.oop">objektklass</link>.
</para>
<simpara>
<literal>instanceof</literal> lades till i PHP 5.
</simpara>
<informalexample>
<programlisting>
<![CDATA[
<?php
class A { }
class B { }
$thing = new A;
if ($thing instanceof A) {
echo 'A';
}
if ($thing instanceof B) {
echo 'B';
}
?>
]]>
</programlisting>
<simpara>
Eftersom <literal>$thing</literal> är ett objekt av typ A och inte av typ B
så körs bara det blocket som kollar mot klass A att köras:
</simpara>
<screen>A</screen>
</informalexample>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->