المرجع - ماذا يعني هذا الرمز في PHP؟


Answers

Bitwise المشغل

ما هو الشيء؟ A bit is a representation of 1 or 0. Basically OFF (0) and ON (1)

ما هو البايت؟ تتكون البايت من 8 بتات وأعلى قيمة للبايت هي 255 ، مما يعني أن كل بت يتم تعيينه. سننظر في السبب في أن القيمة القصوى للبايت هي 255.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------

هذا التمثيل من 1 بايت

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 (1 بايت)

بعض الأمثلة لفهم أفضل

عامل التشغيل "AND": &

$a =  9;
$b = 10;
echo $a & $b;

هذا من شأنه إخراج الرقم 8. لماذا؟ حسنا دعونا نرى استخدام جدولنا المثال.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      &     |   0|  0|  0|  0| 1| 0| 0| 0|
------------------------------------------- 

لذلك يمكنك أن ترى من الجدول أن الجزء الوحيد الذي يتشاركانه معًا هو 8 بت.

المثال الثاني

$a =  36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111

البتات المشتركة اثنين هي 32 و 4 ، والتي عندما تضاف معا عودة 36.

عامل التشغيل "Or": |

$a =  9;
$b = 10;
echo $a | $b;

هذا من شأنه إخراج الرقم 11. لماذا؟

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      |     |   0|  0|  0|  0| 1| 0| 1| 1|
-------------------------------------------

ستلاحظ أن لدينا 3 بتات مضبوطة ، في الأعمدة 8 و 2 و 1. أضف تلك: 8 + 2 + 1 = 11.

Question

ما هذا؟

هذه مجموعة من الأسئلة التي تظهر من حين لآخر حول بناء الجملة في PHP. هذه أيضًا عبارة عن ويكي مجتمع ، لذلك يدعى الجميع للمشاركة في الحفاظ على هذه القائمة.

لماذا هذا؟

كان من الصعب العثور على أسئلة حول المشغلين ورموز تركيب الجملة الأخرى
تكمن الفكرة الرئيسية في وجود روابط للأسئلة الموجودة على ، لذلك من الأسهل بالنسبة لنا الرجوع إليها ، وليس نسخ المحتوى من دليل PHP.

¹ ملاحظة: منذ يناير 2013 ، يدعم الأحرف الخاصة . ما عليك سوى إحاطة مصطلحات البحث عن طريق علامات اقتباس ، على سبيل المثال [php] "==" vs "==="

ماذا علي أن أفعل هنا؟

إذا كنت قد أشرت إلى شخص ما هنا لأنك قد طرحت مثل هذا السؤال ، فالرجاء العثور على البنية التالية أدناه. الصفحات المرتبطة بدليل PHP مع الأسئلة المرتبطة بها من المحتمل أن تجيب عن سؤالك. إذا كان الأمر كذلك ، فيوصى بتشجيع الإجابة. لا يقصد بهذه القائمة كبديل عن المساعدة المقدمة من قبل الآخرين.

القائمة

إذا لم يتم سرد الرمز المميز الخاص بك أدناه ، فقد تجده في قائمة Parder Tokens .

& Bitwise Operators أو References

=& References

&= Bitwise Operators

&& Operational Operators

العاملون الحسابيون %

!! العوامل المنطقية

@ مشغلي خطأ التحكم

?: المشغل الثلاثي

?? مشغل Null Coalesce (منذ PHP 7)

: بناء جملة بديلة لهياكل التحكم ، مشغل Ternary

:: نطاق القرار المشغل

\ Namespaces

-> فئات وأشياء

=> Arrays

^ مشغلات Bitwise

>> مشغلي Bitwise

<< مشغلي Bitwise

<<< Heredoc or Nowdoc

= مشغلي التكليف

== المشغلين مقارنة

=== المشغلين مقارنة

!== المشغلين مقارنة

!= مشغلي المقارنة

<> مشغلي المقارنة

<=> مقارنة (منذ PHP 7.0)

  • مشغل سفينة الفضاء (مقارنة ثلاثية)

| مشغلات bitwise

|| العوامل المنطقية

~ مشغلي Bitwise

+ مشغلي الحساب ، مشغلي الصفيف

+= و -= مشغلي التكليف

++ و -- زيادة / انخفاض مشغلي

.= مشغلي التكليف

. مشغلي السلسلة

وسائط الوسيط

, الإعلانات المتغيرة

متغيرات متغيرة

` مشغل التنفيذ

<?= علامات مفتوحة قصيرة

[] Arrays (بناء الجملة القصير منذ PHP 5.4)

<? فتح و إغلاق العلامات

... الحجة تفريغ (منذ PHP 5.6)

** Exponentiation (منذ PHP 5.6)

# سطر واحد على غرار قذيفة تعليق




مشغل Null Coalesce "؟؟" (تمت إضافته في PHP 7)

ليس الاسم الأكثر جذبًا للمشغل ، ولكن PHP 7 يجلب الاندماج غير الملائم إلى حد ما لذلك فكرت في مشاركة مثال.

في PHP 5 ، لدينا بالفعل مشغل ثلاثي ، يقوم باختبار قيمة ، ثم يقوم بإرجاع العنصر الثاني إذا كان ذلك صحيحًا ، أما إذا لم يتم ذلك:

echo $count ? $count : 10; // outputs 10

هناك أيضًا اختصار لذلك الذي يسمح لك بتخطي العنصر الثاني إذا كان نفس العنصر الأول: صدى $ count: 10؛ // أيضا مخرجات 10

في PHP 7 نحصل بالإضافة إلى؟ operator which rather than indicating extreme confusion which is how I would usually use two question marks together instead allows us to chain together a string of values. Reading from left to right, the first value which exists and is not null is the value that will be returned.

// $a is not set
$b = 16;

echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16

This construct is useful for giving priority to one or more values coming perhaps from user input or existing configuration, and safely falling back on a given default if that configuration is missing. It's kind of a small feature but it's one that I know I'll be using as soon as my applications upgrade to PHP 7.




syntax    name              description 
x == y    Equality          True if x and y have the same key/value pairs
x != y    Inequality        True if x is not equal to y
x === y   Identity          True if x and y have the same key/value pairs in 
                              the same order and of the same types
x !== y   Non-identity      True if x is not identical to y
++ x      Pre-increment     Increments x by one, then returns x
x ++      Post-increment    Returns x, then increments x by one
-- x      Pre-decrement     Decrements x by one, then returns x
x --      Post-decrement    Returns x, then decrements x by one
x and y   And               True if both x and y are true x=6 y=3 
                              (x < 10 and y > 1) returns true
x && y    And               True if both x and y are true x=6 y=3 
                              (x < 10 && y > 1) returns true
a . b     Concatenation     Concatenate two strings: "Hi" . "Ha"



<=> مشغل سفينة الفضاء

تمت إضافته في PHP 7

مشغل سفينة الفضاء <=> هو أحدث مشغل مقارنة تمت إضافته في PHP 7. وهو مشغل ثنائي غير اقتران له نفس الأسبقية مثل مشغلي المساواة ( == != ، === !== ). يسمح هذا المشغل بإجراء مقارنة ثلاثية أسهل بين المعاملات اليسرى واليمنى.

ينتج المشغل تعبيرًا صحيحًا عن:

  • 0 عندما يكون كل المعاملات متساوية
  • أقل من 0 عندما يكون المعامل الأيسر أقل من المعامل الأيمن
  • أكبر من 0 عندما يكون المعامل الأيسر أكبر من المعامل الأيمن

على سبيل المثال

1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

سيكون التطبيق العملي الجيد لاستخدام هذا المشغل في عمليات الاسترجاعات نوع المقارنة التي من المتوقع أن تقوم بإرجاع عدد صحيح صفري أو سلبي أو موجب استنادًا إلى مقارنة ثلاثية بين قيمتين. دالة المقارنة التي تم تمريرها إلى usort هي مثال على ذلك.

قبل PHP 7 تكتب ...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    if ($a < $b) {
        return -1;
    } elseif ($a > $b) {
        return 1;
    } else {
        return 0;
    }
});

منذ PHP 7 يمكنك الكتابة ...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    return $a <=> $b;
});



{} أقواس معقوفة

وبعض الكلمات عن آخر مشاركة

$x[4] = 'd'; // it works
$x{4} = 'd'; // it works

$echo $x[4]; // it works
$echo $x{4}; // it works

$x[] = 'e'; // it works
$x{} = 'e'; // does not work

$x = [1, 2]; // it works
$x = {1, 2}; // does not work

echo "${x[4]}"; // it works
echo "${x{4}}"; // does not work

echo "{$x[4]}"; // it works
echo "{$x{4}}"; // it works






نظرة عامة على المشغلين في PHP :

العوامل المنطقية:

  • $ a && $ b: TRUE إذا كان كل من $ a و $ b هما TRUE.
  • $ أ || $ b: TRUE إذا كان $ a أو $ b هو TRUE.
  • $ a xor $ b: TRUE إذا كان $ a أو $ b هو TRUE ، ولكن ليس كلاهما.
  • ! $ a: TRUE إذا لم يكن $ a TRUE.
  • $ a و $ b: TRUE إذا كان كل من $ a و $ b هما TRUE.
  • $ a أو $ b: TRUE إذا كان $ a أو $ b هو TRUE.

عوامل المقارنة:

  • $ a == $ b: TRUE إذا كان $ a يساوي $ b بعد كتابة النوع.
  • $ a === $ b: TRUE إذا كان $ a يساوي $ b ، وكانت من نفس النوع.
  • $ a! = $ b: TRUE إذا لم يكن $ a يساوي $ b بعد كتابة شعوذة.
  • $ a <> $ b: TRUE إذا لم يكن $ a يساوي $ b بعد كتابة شعوذة.
  • $ a! == $ b: TRUE إذا لم يكن $ a يساوي $ b ، أو ليس من النوع نفسه.
  • $ a <$ b : TRUE إذا كان $ a أقل من $ b تمامًا.
  • $ a> $ b : TRUE إذا كان $ a أكبر من $ b بدقة.
  • $ a <= $ b : TRUE إذا كان $ a أقل من أو يساوي $ b.
  • $ a> = $ b : TRUE إذا كان $ a أكبر من أو يساوي $ b.
  • $ a <=> $ b : عدد صحيح أقل من أو يساوي أو أكبر من الصفر عندما يكون $ a أقل من أو يساوي أو أكبر من $ b على التوالي. متاح من PHP 7.
  • $ أ؟ $ b: $ c : if $ a return $ b else return $ c ( operator ternary operator )
  • $ أ ؟؟ $ ج : نفس $ a؟ $ a: $ c ( عامل تداخل فارغ - يتطلب PHP> = 7)

العوامل الحسابية:

  • - $ a : مقابل $ a.
  • $ a + $ b : مجموع $ a و $ b.
  • $ a - $ b : الفرق بين $ a و $ b.
  • $ a * $ b : منتج $ a و $ b.
  • $ a / $ b : Quotient of a $ and $ b.
  • $ a $ $ b : Remainder $ a a مقسومًا على $ b.
  • $ a ** $ b : نتيجة رفع $ a إلى $ b'th power (المقدمة في PHP 5.6)

زيادة / تناقص المشغلين:

  • ++ $ a : زيادات $ a واحد ، ثم إرجاع $ a.
  • $ a ++ : إرجاع $ a ، ثم زيادة $ a بواحد.
  • - $ a : ينقص $ a واحد ، ثم يعود $ a.
  • $ a-- : إرجاع $ a ، ثم إنقاص $ a واحدًا.

مشغلات bitwise:

  • $ a & $ b : يتم تعيين البت التي تم تعيينها في $ a و $ b.
  • $ أ | $ b : يتم تعيين البتات التي تم تعيينها في $ a أو $ b.
  • $ a ^ $ b : البتات التي تم تعيينها في $ a أو $ b ولكن لا يتم تعيين كليهما.
  • ~ $ a : لم يتم تعيين البت التي تم تعيينها في $ a ، والعكس صحيح.
  • $ a << $ b : Shift the bits of $ $ b b steps to the left (each step means "multiply by two")
  • $ a >> $ b : إزاحة بتات خطوات $ b $ إلى اليمين (كل خطوة تعني "القسمة على اثنين")

مشغلي السلسلة:

  • $ أ. $ b : تسلسل $ a و $ b.

مشغلي الصفيف:

  • $ a + $ b : Union of a a and $ b.
  • $ a == $ b : TRUE إذا كان لكل من $ a و $ b أزواج المفاتيح / القيم نفسها.
  • $ a === $ b : TRUE إذا كان لكل من $ a و $ b نفس أزواج المفاتيح / القيم بنفس الترتيب وبنفس الأنواع.
  • $ a! = $ b : TRUE إذا لم يكن $ a يساوي $ b.
  • $ a <> $ b : TRUE إذا لم يكن $ a يساوي $ b.
  • $ a! == $ b : TRUE إذا لم يكن $ a متطابقًا مع $ b.

مشغلي المهمة:

  • $ a = $ b : يتم تعيين قيمة $ b إلى $ a
  • $ a + = $ b : Same as $ a = $ a + $ b
  • $ a - = $ b : Same as $ a = $ a - $ b
  • $ a * = $ b : Same as $ a = $ a * $ b
  • $ a / = $ b : Same as $ a = $ a / $ b
  • $ a٪ = $ b : Same as $ a = $ a $ $ b
  • $ a ** = $ b : Same as $ a = $ a ** $ b
  • $ a. = $ b : Same as $ a = $ a. $ ب
  • $ a & = $ b : Same as $ a = $ a & $ b
  • $ a | = $ b : Same as $ a = $ a | $ ب
  • $ a ^ = $ b : Same as $ a = $ a ^ $ b
  • $ a << = $ b : Same as $ a = $ a << $ b
  • $ a >> = $ b : Same as $ a = $ a> $ b

ملحوظة

والمشغل و / or المشغل لديهم أسبقية أقل من عامل التخصيص = .

هذا يعني أن $a = true and false; يعادل ($a = true) and false .

في معظم الحالات ، قد ترغب في استخدام && و || التي تتصرف بطريقة معروفة من لغات مثل C أو Java أو JavaScript.




Null combescing operator (؟؟)

تمت إضافة هذا المشغل في PHP 7.0 للحالة الشائعة التي تحتاج إلى استخدام مشغل الثلاثي بالتزامن مع isset() . تقوم بإرجاع المعامل الأول الخاص به إذا كان موجودًا وغير NULL . وإلا فإنها ترجع المعامل الثاني.

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>



سؤال :

ماذا تعني "&" هنا في PHP؟

PHP "&" المشغل

يجعل الحياة أكثر سهولة عندما نعتاد عليها .. (راجع المثال أدناه بعناية)

يتم عادةً فحص وحدات البت التي تم تعيينها في كلٍّ من $ و $ b.

هل لاحظت كيف تعمل هذه المكالمات؟

   error_reporting(E_ERROR | E_WARNING | E_PARSE);
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    error_reporting(E_ALL & ~E_NOTICE);
    error_reporting(E_ALL);

حتى وراء كل ما سبق لعبة المشغل والبتات.

إحدى الحالات المفيدة هذه هي تكوينات سهلة مثل إعطاء أدناه ، لذلك يمكن لحقل صحيح واحد تخزين الآلاف من المجموعات الخاصة بك.

لقد قرأ معظم الأشخاص المستندات بالفعل ولكنهم لم يعيدوا استخدام حالة الاستخدام الحقيقي لهذه العوامل التي تستخدم في المعامل البسيط.

مثال أنك ستحب

<?php

class Config {

    // our constants must be 1,2,4,8,16,32,64 ....so on
    const TYPE_CAT=1;
    const TYPE_DOG=2;
    const TYPE_LION=4;
    const TYPE_RAT=8;
    const TYPE_BIRD=16;
    const TYPE_ALL=31;

    private $config;

    public function __construct($config){
        $this->config=$config;

        if($this->is(Config::TYPE_CAT)){
            echo 'cat ';
        }
        if($this->is(Config::TYPE_DOG)){
            echo 'dog ';
        }
        if($this->is(Config::TYPE_RAT)){
            echo 'rat ';
        }
        if($this->is(Config::TYPE_LION)){
            echo 'lion ';
        }
        if($this->is(Config::TYPE_BIRD)){
            echo 'bird ';
        }
        echo "\n";
    }

    private function is($value){
        return $this->config & $value;
    }
}

new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird