2008-08-04 30 views
21

Tôi đang cố gắng để làm điều này (trong đó sản xuất một lỗi T_VARIABLE bất ngờ):Sử dụng tài sản đối tượng như mặc định cho thuộc phương pháp

public function createShipment($startZip, $endZip, $weight = $this->getDefaultWeight()){} 

Tôi không muốn đặt một con số kỳ diệu trong đó cho cân, kể từ đối tượng tôi đang sử dụng có thông số "defaultWeight" rằng tất cả các lô hàng mới nhận được nếu bạn không chỉ định trọng lượng. Tôi không thể đặt defaultWeight trong bản thân lô hàng, bởi vì nó thay đổi từ nhóm lô hàng thành nhóm giao hàng. Có cách nào tốt hơn để làm điều đó hơn những điều sau đây không?

public function createShipment($startZip, $endZip, weight = 0){ 
    if($weight <= 0){ 
     $weight = $this->getDefaultWeight(); 
    } 
} 

Trả lời

13

Đây không phải là tốt hơn nhiều:

public function createShipment($startZip, $endZip, $weight=null){ 
    $weight = !$weight ? $this->getDefaultWeight() : $weight; 
} 

// or... 

public function createShipment($startZip, $endZip, $weight=null){ 
    if (!$weight) 
     $weight = $this->getDefaultWeight(); 
} 
1

này sẽ cho phép bạn để vượt qua một trọng lượng từ 0 và vẫn hoạt động tốt. Lưu ý toán tử ===, điều này sẽ kiểm tra xem trọng số có khớp với "null" trong cả giá trị và kiểu (ngược lại với ==, giá trị này chỉ là giá trị, vì vậy 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){ 
    if ($weight === null) 
     $weight = $this->getDefaultWeight(); 
} 
+0

[@ pix0r] (# 2213) Đó là một điểm tốt, tuy nhiên, nếu bạn nhìn vào mã ban đầu nếu trọng lượng được thông qua là 0 nó sử dụng trọng lượng mặc định. – Kevin

1

Bạn có thể sử dụng một thành viên lớp tĩnh để giữ mặc định:

class Shipment 
{ 
    public static $DefaultWeight = '0'; 
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) { 
     // your function 
    } 
} 
6

lừa gọn gàng với boolean toán tử OR:

public function createShipment($startZip, $endZip, $weight = 0){ 
    $weight or $weight = $this->getDefaultWeight(); 
    ... 
} 
Các vấn đề liên quan