Nou dat is dus een "bitwise operator":
http://www.php.net/manual/nl/language.operators.bitwise.php
Ik heb het even doorgelezen, ik snap het nog niet echt ;D
edit:
Ik heb het, neem nu:
<?
echo 12 ^ 9; // Outputs '5'
?>
Hoe zien die 12 en 9 er dan uit in bitjes:
1 - 2 - 4 - 8
0 - 0 - 1 - 1 = 12
1 - 0 - 0 - 1 = 9
1 - 0 - 1 - 0 = 5
Hoe komen we nu aan 5?
De ^ operator betekent dan maar 1 van de bitjes van 12 en 9 geset moet zijn dus:
0 - 1 = 1
0 - 0 = 0
1 - 0 = 1
1 - 1 = 0
1010 is 5
Zo gaat het dus ook met &, | en ~.
Edit:
1 - 2 - 4 - 8
0 - 0 - 1 - 1 = 12
1 - 0 - 0 - 1 = 9
1 - 0 - 1 - 0 = 5
moet dus zijn:
8 - 4 - 2 - 1
1 - 1 - 0 - 0 = 12
1 - 0 - 0 - 1 = 9
0 - 1 - 0 - 1 = 5
Want 12 >> 1 is 6 dat is dus
0110
De twee 1 tjes zijn dus 1 stap naar rechts verplaatst.
Link gekopieerd
Ik snap het niet echt, maar het ziet er interressant uit. Maar wat doet zo'n bitwise operator dan voor een =-teken?
$variabale ^= 1;
En wat ik ook wel 'ns gezien heb, is een & teken voor de $parameter.
function (& $parameter) {
return 'Hoi?';
}
Zou iemand dat ook kunnen uitleggen? En eventueel een aanvulling op de uitleg van Martijn.
Link gekopieerd
1e vraag:
+= of .= , -= ken ik wel maar ^= niet. Deze kan ik ook zosnel niet vinden in de PHP documentatie.
edit:
3e bericht van boven
http://www.php.net/manual/nl/language.operators.assignment.php
2e vraag:
De functie heeft een parameter met een reference. Een voorbeeldje doet wonderen:
<?php
error_reporting(E_ALL);
function test1( $parameter )
{
$parameter += 1;
}
function test2( &$parameter )
{
$parameter += 1;
}
$variabele = 10;
test1($variabele);
echo $variabele; // Geeft 10
test2($variabele);
echo $variabele; // Geeft 11
?>
Info:
http://www.php.net/manual/nl/language.references.php
Link gekopieerd
@Jip:
http://nl3.php.net/references
Ik snal er alleen niks van:P
@Martijn
Je hebt het over
<?
echo 12 ^ 9; // Outputs '5'
?>
Maar je doet niks met de 9?
Link gekopieerd
En wat ik ook wel 'ns gezien heb, is een & teken voor de $parameter.
Dat is een zogenaamde "pass by reference" variabele, lees het artikel over references maar eens door. Je maakt hiermee geen kopie van de variabele welke je meegeeft maar verwijst naar de daadwerkelijke variabele:
<?php
function reference_test( &$var )
{
$var = 100;
}
$a = 1;
reference_test( $a );
echo $a;
?>
Een bitwise-operator is gewoon net een operator zoals +, -, * en / dat zijn.
In de functie die TS hier geeft wordt gecontroleerd of een bepaalde "bit" in het getal is "geset", dit soort structuren worden heel vaak gebruikt met rechtensystemen.
Stel dat er de volgende rechten zijn:
Lezen: 1
Schrijven: 2
Uitvoeren: 4
Iemand met het nummer 3 heeft dus recht op lezen en schrijven, bit 1 en 2 zijn hoog.
3 & 2 = 2
3 & 1 = 1
Maar stel nu dat iemand nummer 5 heeft:
5 & 1 = 1
5 & 2 = 0 (ofwel: geen schrijfrechten)
5 & 4 = 4
Link gekopieerd
<?
echo 12 ^ 9; // Outputs '5'
?>
We vergelijken de bitwaardes van 12 en 9 met elkaar aan de hand van de ^ operator.
Het is misschien handig om te weten hoe je de 1-en en 0-en moet lezen.
Decimaal: 1111
- 1 duizendtal
- 1 honderdtal
- 1 tiental
- 1 enkel getal
Binair: 1111
- 1 1-bit
- 1 2-bit
- 1 4-bit
- 1 8-bit
Dit is dus 1+2+4+8 is 15, 1111(binair) is dus 15(decimaal). Met de binary operators gaan we dus decimale getallen binair met elkaar vergelijken.
Link gekopieerd
Over die rechten;
Lezen: 1
Schrijven: 2
Uitvoeren: 4
Hoe gaat dat verder?
Als ik bijv. de volgende rechten heb:
Lezen: 1
Schrijven: 2
Uitvoeren: 4
Wijzigen: 8
Verwijderen: ?16?
Verplaatsen: ?32?
Locken: ?64?
Belangrijk maken: ?128?
Wat zijn die laatste paar, of kunnen/bestaan deze niet?
Link gekopieerd
Het was maar een voorbeeld he, hoe jij ze noemt moet je zelf weten, het zouden ook levels kunnen zijn :) Maar zoals jij zegt kun je het doen ja.
Beginner 1
Gevorderd 2
Expert 4
Guru 8
16, 32, 64 etc....tot ongeveer 2 tot de macht 32 aangezien PHP alleen bitwise operaties kan uitvoeren op 32bits getallen.
Die 1, 2, 4, 8 etc zijn dus "bits":
Binair => Decimaal
00001 = 1
00010 = 2
00100 = 4
01000 = 8
10000 = 16
10101 = 21
Link gekopieerd