เกิดข้อผิดพลาดขณะกำหนดทรัพย์สินสาธารณะ

function CharField($len)
{
    return "VARCHAR($len)";
}


class ArticleModel extends Model
{
    public $name = CharField(100); // Error Here
}

เมื่อฉันกำหนดทรัพย์สินสาธารณะเช่นนี้ด้วยค่าที่ส่งคืนจากฟังก์ชัน มันจะเกิดข้อผิดพลาด:

ข้อผิดพลาดในการแยกวิเคราะห์ PHP: ข้อผิดพลาดทางไวยากรณ์, ไม่คาดคิด '(', คาดหวัง ',' หรือ ';' ใน /var/www/test/db.php

มีเหตุผลอะไรได้บ้าง?


person Abhilash Nanda    schedule 11.11.2011    source แหล่งที่มา
comment
คุณกำลังพยายามที่จะบรรลุอะไร? คุณต้องการให้คุณสมบัติ $name มีสตริงตัวอักษร VARCHAR(100) หรือไม่? หรือคุณต้องการให้คุณสมบัติ $name เป็นค่าสตริงที่มีความยาวไม่เกิน 100 ตัวอักษร?   -  person liquorvicar    schedule 11.11.2011
comment
จริงๆ แล้วฉันกำลังพยายามเขียนการนำ ORM ไปใช้อย่างผิวเผิน คลาสนี้สามารถจัดคลาสย่อยได้และคลาสย่อยจะถูกเปลี่ยนเป็นตารางที่มีคุณสมบัติเป็นชื่อคอลัมน์ ต่อมาเมื่อเข้าถึงด้วย object เราก็สามารถอัพเดตตารางได้ง่ายๆ โดยกำหนดค่าให้กับคุณสมบัติ... คล้ายกับที่ Django ทำ... อย่างไรก็ตาม ผมว่าผมคงต้องหาวิธีอื่นเพราะวิธีนี้ไม่สามารถทำได้ ฉันกำลังมุ่งหน้าไป... ฉันหวังว่าคุณจะช่วยได้บ้าง... ขอบคุณ!!!   -  person Abhilash Nanda    schedule 11.11.2011


คำตอบ (3)


เริ่มต้นค่าในตัวสร้างของคุณ

person mark_dj    schedule 11.11.2011

คุณสามารถเริ่มต้นคุณสมบัติด้วยค่าคงที่เท่านั้น:

http://www.php.net/manual/en/language.oop5.properties.php

[คุณสมบัติ] ถูกกำหนดโดยใช้หนึ่งในคำหลักสาธารณะ ป้องกัน หรือส่วนตัว ตามด้วยการประกาศตัวแปรปกติ การประกาศนี้อาจรวมถึงการกำหนดค่าเริ่มต้น แต่การกำหนดค่าเริ่มต้นนี้ต้องเป็นค่าคงที่ นั่นคือ จะต้องสามารถประเมินได้ในเวลาคอมไพล์ และต้องไม่ขึ้นอยู่กับข้อมูลรันไทม์เพื่อที่จะได้รับการประเมิน

ดังนั้น เริ่มต้นมันในตัวสร้างของคุณ

person CodeCaster    schedule 11.11.2011
comment
ขอบคุณทุกคน... สงสัยต้องหาทางอื่นแล้ว... :( - person Abhilash Nanda; 11.11.2011

ตามคู่มือ คุณสามารถกำหนดค่าคงที่ได้เฉพาะเมื่อสร้างอินสแตนซ์เท่านั้น คุณสมบัติของคลาส

person jondro    schedule 11.11.2011