0

こんにちは、スタック オーバー フロー メンバーの皆さん。以下のコードのクラスを書くことができませんでした。php の専門家の 1 人が助けてくれることを願っていました。

$obj = new ClassName ();
$obj->setName ('Name of Something');
$obj->price = 500.00;
$obj ['address_primary'] = 'First Line of Address';
$obj->address_secondary = 'Second Line of Address';
$obj->city = 'the city';
$obj->state = 'ST';
$obj->setZip (12345);

echo 'Name :: ', $obj->name, PHP_EOL;
echo 'Price :: $', $obj ['price'], PHP_EOL;
echo 'Address :: ', $obj->address_primary, ' ', $obj->getAddressSecondary (), PHP_EOL;
echo 'City, State, Zip :: ', $obj->city, ', ', $obj ['state'], ' ', $obj->getZip ();

クラスを記述しようとするたびに、空白で出力されるか、クラスでメソッドが宣言されていないというエラーが Web Storm によってスローされます。

私が使用したコード:

var $name;         // House Name
var $price;   // Price of House
var $address_1;         // Address 1
var $address_2;    // Address 2
var $city; // City
var $state; // state
var $zip; // zip


// Class Constructor
function Property($name, $price, $address_1, $address_2, $city, $state, $zip) {
$this->setName = $name;
$this->price = $price;
$this->address_primary = $address_1;
$this->address_secondary = $address_2;
$this->city = $city;
$this->state = $state;
$this->zip = $zip;
}
// Getter/Setter functions
function get_name() {
return $this->name;
}
function set_name($newname) {
$this->name = $newname;
}
function get_price() {
return $this->price;
}
function set_price($newprice) {
$this->price = $newprice;
}
function get_address_1() {
return $this->address_primary;
}
function set_address_1($newaddress_1) {
$this->address_primary = $newaddress_1;
}
function get_address_2() {
return $this->address_secondary;
}
function set_address_2($newaddress_2) {
$this->address_secondary = $newaddress_2;
}
function get_city() {
return $this->city;
}
function set_city($newcity) {
$this->city = $newcity;
}
function get_state() {
return $this->state;
}
function set_state($newstate) {
$this->state = $newstate;
}
function get_zip() {
return $this->setZip;
}
function set_zip($newzip) {
$this->setZip = $newzip;
}}

コードの提案は大歓迎です!

4

1 に答える 1

1

それは一種の大きな混乱です!:)セッター/ゲッターと直接アクセスを混在させており、古い学校のコンストラクターを使用しています。本当にすぐにきれいにすることができます。

class Property
{
    public function __construct($name, $price, $address_1, $address_2, $city, $state, $zip) 
    {
            $this->name = $name;
            $this->price = $price;
            $this->address_primary = $address_1;
            $this->address_secondary = $address_2;
            $this->city = $city;
            $this->state = $state;
            $this->zip = $zip;
    }
}

コンストラクターですべての変数を使用してクラスを設定する場合は、次のように使用する必要があります。

$obj = new Property(
    "Name of Something",
    500,
    "First Line",
    "Second Line",
    "City",
    "State",
    "90210"        
);


echo 'Name :: ', $obj->name, PHP_EOL;
echo 'Price :: $', $obj->price, PHP_EOL;
echo 'Address :: ', $obj->address_primary, ' ', $obj->address_secondary, PHP_EOL;
echo 'City, State, Zip :: ', $obj->city, ', ', $obj->state, ' ', $obj->zip;

コードでマークされた問題は次のとおりです。

メンバーと関数を混在させています。コンストラクターのこの種のものは大きな破損です:

$this->setName = $price

また、部分文字列アクセス [] を -> と混合し、上部にゲッターを使用しています ->getName()。一貫性を保ち、この場合はパブリック変数の意味を尊重してください。

最後に、コンストラクターにパラメーターがありましたが、まったく使用していませんでした。

別の方法として、デフォルトでコンストラクターの署名変数に値を割り当てて、それらをオプションにすることもできます。

public function __construct($name = "", $price = 0, $address_1 = "", $address_2 = "", $city = "", $state = "", $zip = "" )

そして、以前と同じようにパブリック メンバー アクセスを使用します。

$obj = new Property();
$obj->name = "Some Name"; 

あなたの学習を頑張ってください。

于 2013-02-05T20:52:49.533 に答える