2016-12-04 16 views
5

Có ai biết liệu có cài đặt trong PhpStorm có thể kích hoạt các biến xác định được tạo bằng chức năng extract() không?PhpStorm: trích xuất() xác định các biến

Ví dụ sẽ là một cái gì đó như sau:

/** 
* @return array 
*/ 
protected function orderSet() : array 
{ 
    //... 

    return [ 
     'colour' => $colour, 
     'green' => $green, 
     'orange' => $orange 
    ]; 
} 


/** 
* @test 
*/ 
public function returns_correct_attribute_names() 
{ 
    $params = $this->orderSet(); 
    extract($params); 

    $this->assertEquals(
     'Colour', 
     $colour->name 
    ); 
} 

Tại thời điểm hiện tại bất kỳ biến đó là được chiết xuất trong các thử nghiệm được đánh dấu (không được công nhận), nhưng có lẽ đó là một khung cảnh có thể thay đổi hành vi này?

+1

Bạn có thể sử dụng nhận xét PHPDoc nội tuyến bằng '@ var' để cho biết rằng biến này được biết và loại đó là:'/** @var MyClass $ color */' – LazyOne

+0

Cảm ơn @LazyOne - ngoài việc sử dụng chú thích, không có gì khác trong PhpStorm? –

+0

Trên thực tế, chỉ cần thử điều đó và điều này dường như không hoạt động. –

Trả lời

6

Giải pháp mà LazyOne cung cấp thực sự hoạt động. Tuy nhiên, bạn cần thêm một chút ngữ cảnh để thực hiện nó.

Để thông báo cho chính xác PHPSTORM về các biến bạn muốn khai báo bình luận phải được đặt trực tiếp trên chiết xuất() và không phải là chức năng phụ huynh.

public function db(){ 
    $db = new SQLite3('db/mysqlitedb.db'); 

    $payments = $db->query('SELECT * FROM payments'); 

    while ($pay = $payments->fetchArray()){ 
     /** 
     * @var string $to_user 
     * @var string $from_user 
     * @var number $amount 
     */ 
     extract($pay); 
     if (isset($to_user, $from_user, $amount)) 
      echo "TO: {$to_user}| FROM: {$from_user}| $ {$amount} \n"; 
    }; 
} 

Đây là mẫu đang hoạt động từ mã của tôi (không thể sao chép của bạn vì một số lý do).

Bạn có thể thấy ngay trước khi tôi sử dụng hàm trích xuất() tôi khai báo trong khối nhận xét phía trên biến và loại dữ liệu ẩn.

Phần thưởng: nếu bạn dự định sử dụng trích xuất, tôi khuyên bạn nên sử dụng một isset để đảm bảo mảng bạn đang phân tích chứa các trường bạn đang mong đợi. ví dụ trong mã ở trên

+3

Huh ... Sau hơn 10 năm sử dụng PHP, TIL: isset có thể mất hơn 1 biến. +1 – Oberst

Các vấn đề liên quan