2012-02-17 30 views
7

Khi mã "chống tương lai" bằng cách thử nghiệm trên PHP 5.4, tôi nhận được một cảnh báo mà tôi không hiểu.Chỉ số mảng của tôi là 'bù trừ chuỗi bất hợp pháp' theo cách nào?

function __clone() { 
    $this->changed = TRUE; 
    foreach ($this->conditions as $key => $condition) { 
    if (
    $condition['field'] 
    instanceOf QueryConditionInterface) { 
     $this->conditions[$key]['field'] = clone($condition['field']); 
    } 
    } 
} 

Tôi đã tách ra $condition['field'] thành hàng riêng để giảm số lượng mã cần tập trung vào. Về dòng cụ thể, PHP có này để nói

Cảnh báo: chuỗi bất hợp pháp bù đắp 'field' trong DatabaseCondition->__clone()

Và tôi chỉ không thể nhìn thấy như thế nào 'lĩnh vực', là một chuỗi bất hợp pháp bù đắp. Tôi đoán rằng tôi chỉ thiếu một cái gì đó hiển nhiên, nhưng nếu cộng đồng không thể tìm thấy một vấn đề, tôi sẽ gửi một báo cáo lỗi.

Tôi giải thích cảnh báo là "Không có trường hợp nào là 'trường' là khóa hợp lệ". Lỗi này sẽ có ý nghĩa nếu tôi đã cố gắng cho chúng tôi ví dụ như một mảng như là một chìa khóa.

+0

Đánh giá mã là để cải thiện mã làm việc. Các câu hỏi cụ thể về ý nghĩa của cảnh báo là không có chủ đề ở đó. –

+1

Bạn có thể 'var_dump ('$ this-> conditions');'? –

+0

Lỗi này cũng xảy ra khi cài đặt Drupal theo PHP 5.4 http://drupal.org/node/1483986 Tôi tin rằng một cái gì đó trong PHP 5.4 bị hỏng, hoặc có lẽ 'trường' bây giờ là một từ khóa PHP dành riêng mà không thể được sử dụng cho mảng, nhưng Tôi đang hướng tới một lỗi PHP. Nó được báo cáo rằng lỗi này không xảy ra trong các phiên bản trước trên PHP. – Brain2000

Trả lời

2

Cảnh báo trông giống như câu nói rằng $condition là một chuỗi. Không có bất kỳ kiến ​​thức nào về mã, tôi không biết nó có ý nghĩa gì không.

+0

Bah, bạn nói đúng. Theo đề xuất của "Mike Purcell" ở trên, tôi var_dump $ điều kiện khi lỗi xảy ra, và có vẻ như nó đôi khi trở thành một chuỗi. – Letharion

3

Nếu không có nhiều kiến ​​thức về việc tạo ra các điều kiện mảng/vòng lặp, tôi chỉ có thể giả định rằng trước tiên bạn nên kiểm tra xem chênh lệch có tồn tại hay không.

if(isset($condition['field']) && $condition['field'] instanceOf QueryConditionInterface) 

Sử dụng isset trong tình huống này là đủ và nhanh hơn array_key_exists, sự khác biệt duy nhất là, nếu $ trạng [ 'lĩnh vực'] là isset NULL sẽ trở lại ngã, array_key_exists sẽ trở thành sự thật, gây phím tồn tại. Nhưng vì bạn chỉ muốn làm việc trên các trường là một cá thể của QueryConditionInterface, nên bạn sẽ chạy tốt với isset.

+0

Đây có lẽ là tôi bị chậm, nhưng tôi không thấy cách áp dụng như thế nào? Nếu đây là một thông báo về 'lĩnh vực' không tồn tại, tôi sẽ không có vấn đề gì về vấn đề này và tìm ra nguồn gốc của vấn đề. Nhưng bây giờ, cách tôi đọc lỗi, _under không có trường hợp là 'trường' một key_ hợp lệ; điều đó không hợp lý với tôi. Đã thêm câu hỏi này vào câu hỏi. – Letharion

+0

nếu điều kiện $ không thực hiện đối tượng mảng hoặc mảng, thì bạn đang cố gắng truy cập chuỗi và bạn không thể truy cập mảng chuỗi char với chuỗi là khóa và nhận lỗi bù trừ chuỗi bất hợp pháp, tôi mới thấy lỗi đó trên 5.4 phần lớn tôi thấy nó trên nhánh 6.0 ... –

+0

Giá trị của điều kiện $ có thể là 'AND' chẳng hạn. – olleolleolle

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