คำหลัก PHP 'var' ทำอะไร


427

นี่อาจเป็นคำถามที่ไม่สำคัญมาก แต่ฉันไม่สามารถหาคำตอบได้ผ่านเครื่องมือค้นหาเว็บหรือบน php.net โปรดนำฉันไปยังที่ที่ฉันสามารถอ่านเกี่ยวกับเรื่องนี้ได้หากคุณไม่มีเวลาอธิบาย

  1. คำหลัก 'var' หมายถึงอะไรใน PHP
  2. มีความแตกต่างระหว่าง PHP4 และ PHP5 หรือไม่?

4
ฉันเดาว่าเมื่อคุณถามคำถามนี้เมื่อวันที่ 30 กรกฎาคม 2009 สิ่งนี้ยังไม่ได้เผยแพร่ที่php.net/manual/en/language.oop5.visibility.php?: "หมายเหตุ: วิธี PHP 4 ของการประกาศตัวแปรด้วย คำหลัก var ยังคงได้รับการสนับสนุนด้วยเหตุผลด้านความเข้ากันได้ (เป็นคำเหมือนสำหรับคำสำคัญสาธารณะ) ใน PHP 5 ก่อน 5.1.3 การใช้งานจะสร้างคำเตือน E_STRICT " หรือบางทีคุณไม่ได้พบมัน แต่คำตอบนั้นชัดเจนที่ php.net
Jaime Montoya

น่าทึ่งจริงๆที่เห็นว่าการเดินทางของ PHP ได้ผ่านไปหลายปีแล้ว!
Mehrdad Shokri

คำตอบ:


384

มันมีไว้สำหรับประกาศตัวแปรสมาชิกระดับใน PHP4 และไม่จำเป็นอีกต่อไป มันจะทำงานใน PHP5 แต่จะเพิ่มE_STRICTคำเตือนใน PHP จากเวอร์ชัน 5.0.0 เป็นเวอร์ชัน 5.1.2 ณ เวลาที่เลิกใช้งาน ตั้งแต่ PHP 5.3, var ไม่ได้ถูกเลิกใช้และเป็นคำพ้องสำหรับ 'สาธารณะ'

ตัวอย่างการใช้งาน:

class foo {
    var $x = 'y'; // or you can use public like...
    public $x = 'y'; //this is also a class member variables.
    function bar() {
    }
}

10
"หมายเหตุ: วิธี PHP 4 ในการประกาศตัวแปรด้วยvarคำหลักยังคงได้รับการสนับสนุนด้วยเหตุผลด้านความเข้ากันได้ (เป็นคำเหมือนสำหรับpublicคำหลัก) ใน PHP 5 ก่อน 5.1.3 การใช้งานจะสร้างE_STRICTคำเตือน" php.net/manual/en/language.oop5.visibility.phpแก้ไข: ฉันเพิ่งเห็นที่ได้ถูกอ้างในคำตอบอื่น แต่คุณควรแก้ไขให้ถูกต้อง
Sk8erPeter

หมายความว่าจำเป็นต้องใช้publicคำสำคัญกับตัวแปรสมาชิก มันเป็นเรื่องจริงเหรอ? ใส่$x;ไม่ได้เหรอ
limeandcoconut

1
ดังนั้นขอแนะนำให้ติดกับสาธารณะ / ส่วนตัวและไม่สนใจ var ทั้งหมดเนื่องจากเราไม่ได้กังวลเกี่ยวกับการทำงานกับ PHP รุ่นที่เลิกใช้แล้ว
NoodleOfDeath

1
ตั้งแต่ 2019: php-fig.org/psr/psr-12/#43-properties-and-constantsระบุว่าvarต้องไม่ใช้และต้องเปิดเผยการมองเห็นของคุณสมบัติทั้งหมด
Charles Wood

79

varคำหลักที่จะใช้ในการตัวแปรประกาศในชั้นเรียนใน PHP 4 :

class Foo {
    var $bar;
}

ด้วย PHP 5 คุณสมบัติและวิธีการในการมองเห็น ( public, protectedและprivate) ได้รับการแนะนำและทำให้varเลิก


17
ใน PHP 5.3 varเป็น de-เลิก :)
Ionut จีสแตน

8
หากเลิกใช้แล้วแนวทางปฏิบัติที่ดีที่สุดใน 5.3 - การใช้หรือไม่ใช้คืออะไร คุณสามารถใช้มันได้private var $foo = 'bar';ไหม
Tom Auger

1
ใครรู้ว่าทำไมมันถูกยกเลิก
Simon East

19
มันไม่ได้รับการสนับสนุนใน 5.1.3 - เหตุผลเดียวที่ให้คือ"เพื่อเหตุผลด้านความเข้ากันได้" "สำหรับเหตุผลที่เข้ากันได้"ฉันคิดว่าวิธีปฏิบัติที่ดีที่สุดคือการใช้งานเฉพาะเมื่อคุณต้องเข้ากันได้กับ PHP 4 แน่นอนไม่ทำprivate var- ที่จะทำลายสิ่งที่รวดเร็วจริง ๆ เช่นvarเดียวกับคำพ้องpublicใน PHP 5
cincodenada

2
varไม่ใช่คำพ้องความจริงpublicเนื่องจากไม่สามารถใช้สำหรับการประกาศสมาชิกคงที่หรือค่าคงที่
โคลินโอเดล

27

ฉันพูดจากhttp://www.php.net/manual/en/language.oop5.visibility.php

หมายเหตุ: วิธี PHP 4 ในการประกาศตัวแปรด้วยคำหลัก var ยังคงได้รับการสนับสนุนด้วยเหตุผลด้านความเข้ากันได้ (เป็นคำเหมือนสำหรับคำหลักสาธารณะ) ใน PHP 5 ก่อน 5.1.3 การใช้งานจะสร้างE_STRICTคำเตือน


ฉันทำการทดสอบ ไม่มีการส่งคืน E_STRICT! sandbox.onlinephpfunctions.com/code/…
Wallace Maxters

1
@WallacedeSouza นั่นเป็นเพราะคุณใช้ PHP 7 ในตัวอย่างของคุณ มันไม่ถูกต้องเฉพาะในรุ่น 5.0 - 5.1.3
RedClover

8

คำตอบ:จากphp 5.3 และ>ที่varคำหลักเทียบเท่ากับpublicตัวแปรเมื่อประกาศภายในชั้นเรียน

class myClass {
  var $x;
}

เหมือนกับ (สำหรับphp 5.3 และ>):

class myClass {
  public $x;
}

ประวัติ:ก่อนหน้านี้มันเป็นบรรทัดฐานสำหรับการประกาศตัวแปรในคลาสแม้ว่าภายหลังจะกลายเป็นค่าเสื่อมราคา แต่ต่อมา (PHP 5.3) มันก็ไม่ได้คิดค่าเสื่อม


5

ดังนั้นโดยทั่วไปมันเป็นแบบเก่าและห้ามใช้กับ PHP เวอร์ชันใหม่ ดีกว่าที่จะใช้คำหลักสาธารณะแทนถ้าคุณไม่รักกับคำหลัก var ดังนั้นแทนที่จะใช้

class Test {
    var $name;
}

ใช้

class Test {
   public $name;
}

ทำไมคุณพูดเช่นนั้น? มีข่าวvarว่าเลิกใช้แล้วหรือยัง ทั้งสองควรมีความหมายเหมือนกัน
NappingRabbit

จากคู่มือ PHP: "วิธี PHP 4 ในการประกาศตัวแปรที่มีคำหลัก var ยังคงได้รับการสนับสนุนด้วยเหตุผลด้านความเข้ากันได้ (เป็นคำเหมือนสำหรับคำหลักสาธารณะ)" php.net/manual/th/language.oop5.visibility.php
Tomark


1

var ถูกใช้เช่น public .if a varable ถูกประกาศเช่นนี้ในคลาส var $ a; ถ้าหมายความว่าขอบเขตนั้นเป็นแบบสาธารณะสำหรับชั้นเรียน ในคำง่าย ๆ var สาธารณะ

var $a;
public

0

ที่นี่และขณะนี้ในการ2018ใช้varสำหรับการประกาศตัวแปรมีความหมายเหมือนpublicใน

class Sample{
    var $usingVar;
    public $usingPublic;

    function .....

}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.