【问题标题】:PHP--> Created a class, but assigning values to the properties failPHP--> 创建了一个类,但是给属性赋值失败
【发布时间】:2011-12-01 00:08:39
【问题描述】:

我正在创建一个类并尝试使用它。但是,我设置的值没有被保留。请指教!

这是我的类定义:

<?php
class MemberData
{
var $mdId;
var $mdFname;
var $mdLname;
var $mdEmail;
var $mdTwitter;
var $mdFacebook;
var $mdMyspace;
var $mdPhoneNumber;
var $mdNotes;

function MemberData($mdId, $mdFname, $mdLname, $mdEmail, $mdTwitter, $mdFacebook, $mdMyspace, $mdPhoneNumber, $mdNotes)
{
        $this->mdId = $mdId;
        $this->mdFname = $mdFname;
        $this->mdLname = $mdLname;
        $this->mdEmail = $mdEmail;
        $this->mdTwitter = $mdTwitter;
        $this->mdFacebook = $mdFacebook;
        $this->mdMyspace = $mdMyspace;
        $this->mdPhoneNumber = $mdPhoneNumber;
        $this->mdNotes = $mdNotes;

}//end function

}//end MemberData class
?>

这里是我实例化类并尝试设置和打印其中一个属性值的地方:

<?php

include("./classes/MemberData.php");

$listMember = new MemberData();

echo "herexy";

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;

        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
                switch($c){

                        case 0: $listMember->mdFname=$data[$c];break;
                        //case 0: $listMember->mdFname["blue"];break;
                        case 0: break;
                        //case 1: $listMember->mdLname($data[$c]);break;
                        case 2: echo "c==$c<br>";break;
                        case 3: echo "c==$c<br>";break;
                        case 4: echo "c==$c<br>";break;
                        case 5: echo "c==$c<br>";break;

                }//end switch
        }
        print "listmember->mdFname == $listmember->mdFname";
    }//end while
    fclose($handle);
}
?>

【问题讨论】:

  • 我会在类中使用 getter 和 setter 来访问类变量。
  • 为什么不直接使用数组和从列号到键的映射?会容易得多。如果您愿意,您可以稍后将数组转换为对象。
  • 为什么会有两个case 0: 语句?
  • 并添加一个default 引发异常的案例,以便您知道什么时候错过了。
  • 此外,每次您从 csv 文件中成功读取时,您都会修改 mdFName 成员。

标签: php class properties instantiation


【解决方案1】:

您有两个case 0 语句。我不经常使用switch 语句,但我很确定这不是应该使用switch 语句的方式。

我会重写你的开关,看起来像这样:

switch ($c) {
    case 0:
        $listMember->mdFname=$data[$c];
        break;
    default:
        echo "c==$c<br>";
}

否则,您的值不会被分配,因为您没有将任何内容传递给构造函数的参数。您需要在创建对象时分配值:

$listMember = new MemberData($arg1, $arg2, ...);.

目前唯一应该设置的属性是mdFname,并且只有当$c 等于0 时。但是,对于 2 case 0: 语句,我不确定解释器在这里做什么,并且很可能不会为该属性分配任何值。

应该read about classes and objects with PHP 5

【讨论】:

    【解决方案2】:

    好吧,我不知道为什么它不起作用,但你做的一些事情真的很奇怪。

    我建议使用数组而不是管理所有属性:

    class MemberData {
    
        public $properties; //I'd recommend private or protected.
    
        function MemberData(array $data) {
            $this->properties['mdId'] = isset($data['mdId']) ? $data['mdId'] : null;
            $this->properties['mdFname'] = isset($data['mdFname']) ? $data['mdFname'] : null;
            $this->properties['mdLname'] = isset($data['mdLname']) ? $data['mdLname'] : null;
            $this->properties['mdEmail'] = isset($data['mdEmail']) ? $data['mdEmail'] : null;
            $this->properties['mdTwitter'] = isset($data['mdTwitter']) ? $data['mdTwitter'] : null;
            $this->properties['mdFacebook'] = isset($data['mdFacebook']) ? $data['mdFacebook'] : null;
            $this->properties['mdMyspace'] = isset($data['mdMyspace']) ? $data['mmdMyspacedId'] : null;
            $this->properties['mdPhoneNumber'] = isset($data['mdPhoneNumber']) ? $data['mdPhoneNumber'] : null;
            $this->properties['mdNotes'] = isset($data['mdNotes']) ? $data['mdNotes'] : null;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      是的,正如你所要求的那样——

      public function get_mdNotes(){return $this->mdNotes;} set_mdNotes($notes){$this->mdNotes = $notes;} 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-01
        • 2018-10-03
        相关资源
        最近更新 更多