การเรียกตัวแปรไวยากรณ์ PHP OOP อย่างง่ายจากวิธีการเรียน

ส่วนใหญ่ฉันเป็นนักออกแบบและไม่ค่อยมีประสบการณ์กับ OOP ใน PHP ดังนั้นโปรดใช้ภาษาสุภาพเนื่องจากคำศัพท์ของฉันอาจไม่แม่นยำนัก ไวยากรณ์ PHP/OOP ที่ฉันต้องการความช่วยเหลือมากที่สุด และฉันได้ค้นหาวิธีแก้ปัญหาหลายครั้งที่นี่และบน Google เนื่องจากฉันคิดว่านี่จะเป็นคำถามที่ค่อนข้างตรงไปตรงมา แต่ไม่พบสิ่งใดที่ช่วยได้

ฉันกำลังพยายามสร้างวิธีการเรียนที่ดึงข้อมูลบัญชีลูกค้าจากฐานข้อมูลโดยใช้รหัสบัญชีของลูกค้า มีตัวแปรประมาณ 20 ตัวที่ฉันต้องการดึงและเข้าถึงได้จากหน้าต่างๆ บนเว็บไซต์ของฉัน

นี่คือไฟล์คลาสของฉัน (classfile.php):

class Accounts{

    // Function to get client data from database.
    public function getAccount($acctId){

        require("/var/www/vhosts/aqios.com/httpdocs/00omvat/dbinfo.php");
        mysql_connect("localhost","user","password") or die();
        mysql_select_db("database") or die();

        $query = "SELECT * FROM clients WHERE id='$acctId' LIMIT 1";
        $result = mysql_query($query) or die();
        while($row = mysql_fetch_array($result)){
            $this->$firstName = $row["firstName"];
            $this->$lastName = $row["lastName"];
            $this->$address1 = $row["address1"];
            $this->$address2 = $row["address2"];
            $this->$city = $row["city"];
            $this->$state = $row["state"];
            //etc., etc.
        }

        mysql_close();
    }

}

นี่คือหนึ่งในหน้าของฉัน (index.php):

include_once('classfile.php');

$acctId = 111111;
$object = new Accounts();
$object->getAccount($acctId); //Script dies unless I comment this line out.

ก่อนอื่น สคริปต์จะตายเว้นแต่ฉันจะแสดงความคิดเห็นในบรรทัดสุดท้าย ดังนั้นจึงมีบางอย่างผิดปกติกับไวยากรณ์ของฉันที่นั่น แต่สิ่งที่ฉันต้องรู้จริงๆ คือจะโทรและวางเมืองหรือตัวแปรอื่นๆ เหล่านี้ลงในหน้าของฉันได้อย่างไร ฉันไม่รู้ไวยากรณ์ที่ถูกต้อง ฉันจินตนาการไม่ออกว่ามันจะเป็น $object->getAccount($acctId)->$city ฉันรู้ว่ามันผิด ฉันจะเรียกเมืองหรือตัวแปรอื่นจากวัตถุนี้ได้อย่างไร

นอกจากนี้ ฉันรู้ด้วยว่าฉันควรใช้วิธีอื่นในการเชื่อมต่อกับฐานข้อมูลของฉัน และฉันจะทำเช่นนั้นทันทีที่คิดเรื่องนี้ออกก่อน

ขอขอบคุณล่วงหน้าสำหรับความช่วยเหลือที่คุณสามารถนำเสนอได้!

เจสัน


person user2076753    schedule 30.10.2013    source แหล่งที่มา
comment
อย่ารวมไว้ในวิธีการอย่าเริ่มต้นการเชื่อมต่อที่นั่นด้วย อย่าใช้ mysql_* ในทางกลับกัน การเข้าถึงคุณสมบัติของอ็อบเจ็กต์ $firstName ควรดำเนินการด้วยวิธี: $this->firstName แต่ก่อนอื่นควรเริ่มต้นในคลาส เช่น class Accounts { public $firstName; public $lastName; //... public function getAccount(...   -  person Royal Bg    schedule 30.10.2013


คำตอบ (2)


สิ่งนี้ไม่ถูกต้อง

$this->$firstName = $row["firstName"];
       ^---remove the $

มันควรจะเป็น

$this->firstName = $row['firstName'];

และเช่นเดียวกันสำหรับบรรทัดต่อๆ ไป

person Marc B    schedule 30.10.2013
comment
ขอบคุณสำหรับข้อเสนอแนะ น่าสนใจว่าไม่มีใครตอบคำถามของฉันจริงๆ เลย ฉันถามเกี่ยวกับไวยากรณ์ของการเรียกตัวแปรเมธอด จริงอยู่ การสืบค้น mysql ของฉันไม่ถูกต้อง แต่นั่นไม่ใช่คำถามของฉัน น่าเสียดายที่ Stack ไม่อนุญาตให้ฉันโพสต์สำเนาการทำงานทั้งหมดเพราะฉันยังใหม่ แต่ฉันจะพยายามและอย่าลืมโพสต์หลังจากผ่านไป 8 ชั่วโมง เกี่ยวกับการเรียกเมธอด vars นี่คือสิ่งที่ฉันต้องการ: $client = $object-›getAccount($acctId); echo $client['ชื่อ']; มันได้ผล! - person user2076753; 30.10.2013

  1. ตามที่ผู้อื่นกล่าวถึง คุณควรใช้ $this->firstName แทน $this->$firstName
  2. $this อ้างถึงวัตถุ ไม่ใช่วิธีการ
  3. มันจะทำงานโดยไม่ต้องเริ่มต้นอย่างชัดเจน แต่คุณควรกำหนดเพื่อให้อ่านฟิลด์อ็อบเจ็กต์ทั้งหมดของคุณได้ดีขึ้นในแบบสาธารณะ (หรือวิธีส่วนตัว / ป้องกันและเขียน):

    บัญชีชั้นเรียน {

    public $firstName;
    public $lastName
    ...
    

    }

  4. ด้วยตัวแปรที่กำหนดไว้ใน 3 คุณควรจะสามารถอ้างอิงถึงค่าของมันด้วย $object->firstName

  5. คุณควรพิจารณาแยกคลาสออกเป็นสอง - บัญชี (เป็นพร็อกซี DB) และบัญชี (เป็นข้อมูลบัญชีเดียว) และใน Accounts->getAccount คุณจะสร้างวัตถุบัญชีและส่งคืน - แต่นี่เป็นการอภิปรายเชิงสถาปัตยกรรมมากกว่า
person sebapalus    schedule 30.10.2013