Làm cách nào để ghi đè một chức năng trong PHP?

5 năm trước bởi Ryan Jentzsch — xem nguồn

chưa đọc

Tôi biết Trình gỡ lỗi PHP nâng cao nhưng tôi cần loại trình gỡ lỗi này
chức năng cho là chế nhạo và thử nghiệm

Để làm ví dụ, tôi muốn sử dụng tính năng mô phỏng PHPUnit để tạo mô phỏng của một
tầng lớp. Tuy nhiên, trong hàm tạo của lớp này là dòng sau để
lấy chuỗi JSON dự kiến

$result = file_get_contents('php. //đầu vào');

Tôi không thể ghi đè chức năng file_get_contents(). công việc xung quanh là
khỉ vá lớp dưới dạng giả và ghi đè hàm tạo (sao chép TẤT CẢ
logic từ hàm tạo đến mô hình giả cho phép lấy kết quả $
từ danh sách đối số của hàm tạo)

Điều này thật khó xử và trong trường hợp sử dụng của tôi, hàm tạo cũng thực hiện các cuộc gọi đến
các phương thức tĩnh trong các đối tượng khác mà phiên bản PHPUnit mới nhất thực hiện
không cho phép bạn chế nhạo các phương thức tĩnh

ADP không được chấp nhận để ghi đè các chức năng ở chỗ nó yêu cầu mã nhị phân để
được cài đặt và php. ini được cấu hình cũng như không hỗ trợ điều này trong
các cửa sổ

Có RFC nào mà tôi không tìm thấy cho phép dễ dàng ghi đè
Chức năng tích hợp sẵn?

@function file_get_contents($string)
{
trả về 'chuỗi giả';
}

Kỹ năng C của tôi khá kém và việc hiểu công cụ Zend là một điều khó khăn
nhiệm vụ hoặc tôi sẽ tự tạo một RFC. Ma quỷ là trong các chi tiết. Sự thật
câu hỏi tôi đang hỏi là một thứ như thế này sẽ KHÓ NHƯ THẾ NÀO để viết mã
và đưa vào lõi PHP?

của Christoph M. Becker — xem nguồn

chưa đọc

Tôi biết Trình gỡ lỗi PHP nâng cao nhưng tôi cần loại trình gỡ lỗi này
chức năng cho là chế nhạo và thử nghiệm

Để làm ví dụ, tôi muốn sử dụng tính năng mô phỏng PHPUnit để tạo mô phỏng của một
tầng lớp. Tuy nhiên, trong hàm tạo của lớp này là dòng sau để
lấy chuỗi JSON dự kiến

$result = file_get_contents('php. //đầu vào');

Tôi không thể ghi đè chức năng file_get_contents(). công việc xung quanh là
khỉ vá lớp dưới dạng giả và ghi đè hàm tạo (sao chép TẤT CẢ
logic từ hàm tạo đến mô hình giả cho phép lấy kết quả $
từ danh sách đối số của hàm tạo)

Điều này thật khó xử và trong trường hợp sử dụng của tôi, hàm tạo cũng thực hiện các cuộc gọi đến
các phương thức tĩnh trong các đối tượng khác mà phiên bản PHPUnit mới nhất thực hiện
không cho phép bạn chế nhạo các phương thức tĩnh

ADP không được chấp nhận để ghi đè các chức năng ở chỗ nó yêu cầu mã nhị phân để
được cài đặt và php. ini được cấu hình cũng như không hỗ trợ điều này trong
các cửa sổ

Có RFC nào mà tôi không tìm thấy cho phép dễ dàng ghi đè
Chức năng tích hợp sẵn?

@function file_get_contents($string)
{
trả về 'chuỗi giả';
}

Kỹ năng C của tôi khá kém và việc hiểu công cụ Zend là một điều khó khăn
nhiệm vụ hoặc tôi sẽ tự tạo một RFC. Ma quỷ là trong các chi tiết. Sự thật
câu hỏi tôi đang hỏi là một thứ như thế này sẽ KHÓ NHƯ THẾ NÀO để viết mã
và đưa vào lõi PHP?

Đã có runkit và uopz cho phép ghi đè hiện có
chức năng

  • https. //pecl. php. mạng/gói/runkit
  • https. //pecl. php. mạng/gói/uopz

--
Christoph M. Becker

của Sara Golemon — xem nguồn

chưa đọc

Để làm ví dụ, tôi muốn sử dụng tính năng mô phỏng PHPUnit để tạo mô phỏng của một
tầng lớp. Tuy nhiên, trong hàm tạo của lớp này là dòng sau để
lấy chuỗi JSON dự kiến

$result = file_get_contents('php. //đầu vào');

Tôi không thể ghi đè chức năng file_get_contents()

Câu trả lời ngắn. Không. Không có RFC hiện tại, khả thi cho mục đích này
Cá nhân, tôi không mong đợi một người sẽ vượt qua

-Sara

của David Lundgren — xem nguồn

chưa đọc

Tôi biết Trình gỡ lỗi PHP nâng cao nhưng tôi cần loại trình gỡ lỗi này
chức năng cho là chế nhạo và thử nghiệm

Nếu đang sử dụng không gian tên, bạn có thể thử ghi đè các hàm tích hợp
theo cách đó. Tôi đã thực hiện việc này thành công trong thư viện của riêng mình để chế nhạo ldap
và gọi hàm imap (https. //git. io/v7ALm)

Bài viết gốc về ý tưởng
http. //www. manuel-strehl. de/dev/overwrite_PHP_built-in_functions. vi. html

Để làm ví dụ, tôi muốn sử dụng tính năng mô phỏng PHPUnit để tạo một bản mô phỏng
của một lớp học. Tuy nhiên, trong hàm tạo của lớp này là như sau
dòng để nhận chuỗi JSON dự kiến

Có thư viện php-mock, dường như có tích hợp cho
PHPUnit, Mockery và Lời tiên tri. Tôi không thể đảm bảo cho nó vì tôi đã không sử dụng nó
chưa

https. //github. com/php-mock/php-mock

dave

David Lundgren
dlundgren@syberisle. net
GPG. 0x26F54D7F

của Dan Ackroyd — xem nguồn

chưa đọc

Có RFC nào mà tôi không tìm thấy cho phép dễ dàng ghi đè
Chức năng tích hợp sẵn?

Không, nhưng có một phần mở rộng. https. //pecl. php. mạng/gói/uopz

Tuy nhiên, tôi tin rằng người duy trì nó khuyên bạn nên tránh sử dụng nó
nếu có thể bởi vì

Tuy nhiên, trong hàm tạo của lớp này là dòng sau để
lấy chuỗi JSON dự kiến

$result = file_get_contents('php. //đầu vào');

Tôi không thể ghi đè chức năng file_get_contents(). công việc xung quanh là
khỉ vá lớp dưới dạng giả và ghi đè lên hàm tạo

Cách giải quyết của bạn là giải pháp tồi cho vấn đề sai

Cố gắng kiểm tra đơn vị những thứ tương tác với thế giới thực là
điều cơ bản bị hỏng để cố gắng làm

Một điều tốt hơn nhiều nên làm là cô lập các lớp bên trong của
ứng dụng của bạn từ 'thế giới bên ngoài khủng khiếp', bằng cách giải nén
bit tương tác với thế giới bên ngoài với một giao diện được
tiêm

giao diện InputReader {
hàm công khai getString();
}

lớp PhpInputReader triển khai InputReader {
hàm công khai getString() {
trả về file_get_contents('php. //đầu vào');
}
}

Và sau đó đưa vào một phiên bản giả của InputReader khi bạn đang thực hiện
kiểm tra đơn vị cho lớp hiện phụ thuộc vào InputReader

Và chỉ để được rõ ràng;
kiểm tra lớp PhpInputReader, khi nó tương tác với hệ thống và
vì vậy không thể được kiểm tra đơn vị. Cố gắng thực hiện một bài kiểm tra đơn vị cho một cái gì đó
điều đó nên có một bài kiểm tra tích hợp chỉ là điều sai trái

Có một bài nói chuyện của một người tên là J B Rainsberger đã giúp tôi
hiểu bản chất chính xác của bài kiểm tra đơn vị và bài kiểm tra tích hợp
https. //www. youtube. com/watch?v=VDfX44fZoMc hoặc
http. //vimeo. com/80533536

Tôi thực sự khuyên bạn nên xem nó cho bất cứ ai đang nghĩ rằng
thay thế các chức năng như file_get_contents() bằng phiên bản thử nghiệm là một
điều thích hợp để làm

hoan hô
Đan
xác nhận

của Christoph M. Becker — xem nguồn

chưa đọc

Tôi biết Trình gỡ lỗi PHP nâng cao nhưng tôi cần loại trình gỡ lỗi này
chức năng cho là chế nhạo và thử nghiệm

Để làm ví dụ, tôi muốn sử dụng tính năng mô phỏng PHPUnit để tạo mô phỏng của một
tầng lớp. Tuy nhiên, trong hàm tạo của lớp này là dòng sau để
lấy chuỗi JSON dự kiến

$result = file_get_contents('php. //đầu vào');

Tôi không thể ghi đè chức năng file_get_contents(). công việc xung quanh là
khỉ vá lớp dưới dạng giả và ghi đè hàm tạo (sao chép TẤT CẢ
logic từ hàm tạo đến mô hình giả cho phép lấy kết quả $
từ danh sách đối số của hàm tạo)

Điều này thật khó xử và trong trường hợp sử dụng của tôi, hàm tạo cũng thực hiện các cuộc gọi đến
các phương thức tĩnh trong các đối tượng khác mà phiên bản PHPUnit mới nhất thực hiện
không cho phép bạn chế nhạo các phương thức tĩnh

ADP không được chấp nhận để ghi đè các chức năng ở chỗ nó yêu cầu mã nhị phân để
được cài đặt và php. ini được cấu hình cũng như không hỗ trợ điều này trong
các cửa sổ

Có RFC nào mà tôi không tìm thấy cho phép dễ dàng ghi đè
Chức năng tích hợp sẵn?

@function file_get_contents($string)
{
trả về 'chuỗi giả';
}

Kỹ năng C của tôi khá kém và việc hiểu công cụ Zend là một điều khó khăn
nhiệm vụ hoặc tôi sẽ tự tạo một RFC. Ma quỷ là trong các chi tiết. Sự thật
câu hỏi tôi đang hỏi là một thứ như thế này sẽ KHÓ NHƯ THẾ NÀO để viết mã
và đưa vào lõi PHP?

Đã có runkit và uopz cho phép ghi đè hiện có
chức năng

  • https. //pecl. php. mạng/gói/runkit
  • https. //pecl. php. mạng/gói/uopz

--
Christoph M. Becker

của David Lundgren — xem nguồn

chưa đọc

Tôi biết Trình gỡ lỗi PHP nâng cao nhưng tôi cần loại trình gỡ lỗi này
chức năng cho là chế nhạo và thử nghiệm

Nếu đang sử dụng không gian tên, bạn có thể thử ghi đè các hàm tích hợp
theo cách đó. Tôi đã thực hiện việc này thành công trong thư viện của riêng mình để chế nhạo ldap
và gọi hàm imap (https. //git. io/v7ALm)

Bài viết gốc về ý tưởng
http. //www. manuel-strehl. de/dev/overwrite_PHP_built-in_functions. vi. html

Để làm ví dụ, tôi muốn sử dụng tính năng mô phỏng PHPUnit để tạo một bản mô phỏng
của một lớp học. Tuy nhiên, trong hàm tạo của lớp này là như sau
dòng để nhận chuỗi JSON dự kiến

Có thư viện php-mock, dường như có tích hợp cho
PHPUnit, Mockery và Lời tiên tri. Tôi không thể đảm bảo cho nó vì tôi đã không sử dụng nó
chưa

https. //github. com/php-mock/php-mock

dave

David Lundgren
dlundgren@syberisle. net
GPG. 0x26F54D7F

của Dan Ackroyd — xem nguồn

chưa đọc

Có RFC nào mà tôi không tìm thấy cho phép dễ dàng ghi đè
Chức năng tích hợp sẵn?

Không, nhưng có một phần mở rộng. https. //pecl. php. mạng/gói/uopz

Tuy nhiên, tôi tin rằng người duy trì nó khuyên bạn nên tránh sử dụng nó
nếu có thể bởi vì

Tuy nhiên, trong hàm tạo của lớp này là dòng sau để
lấy chuỗi JSON dự kiến

$result = file_get_contents('php. //đầu vào');

Tôi không thể ghi đè chức năng file_get_contents(). công việc xung quanh là
khỉ vá lớp dưới dạng giả và ghi đè lên hàm tạo

Cách giải quyết của bạn là giải pháp tồi cho vấn đề sai

Cố gắng kiểm tra đơn vị những thứ tương tác với thế giới thực là
điều cơ bản bị hỏng để cố gắng làm

Một điều tốt hơn nhiều nên làm là cô lập các lớp bên trong của
ứng dụng của bạn từ 'thế giới bên ngoài khủng khiếp', bằng cách giải nén
bit tương tác với thế giới bên ngoài với một giao diện được
tiêm

giao diện InputReader {
hàm công khai getString();
}

lớp PhpInputReader triển khai InputReader {
hàm công khai getString() {
trả về file_get_contents('php. //đầu vào');
}
}

Và sau đó đưa vào một phiên bản giả của InputReader khi bạn đang thực hiện
kiểm tra đơn vị cho lớp hiện phụ thuộc vào InputReader

Và chỉ để được rõ ràng;
kiểm tra lớp PhpInputReader, khi nó tương tác với hệ thống và
vì vậy không thể được kiểm tra đơn vị. Cố gắng thực hiện một bài kiểm tra đơn vị cho một cái gì đó
điều đó nên có một bài kiểm tra tích hợp chỉ là điều sai trái

Có một bài nói chuyện của một người tên là J B Rainsberger đã giúp tôi
hiểu bản chất chính xác của bài kiểm tra đơn vị và bài kiểm tra tích hợp
https. //www. youtube. com/watch?v=VDfX44fZoMc hoặc
http. //vimeo. com/80533536

Tôi thực sự khuyên bạn nên xem nó cho bất cứ ai đang nghĩ rằng
thay thế các chức năng như file_get_contents() bằng phiên bản thử nghiệm là một
điều thích hợp để làm

hoan hô
Đan
xác nhận

Chức năng ghi đè trong PHP là gì?

Trong ghi đè hàm, cả lớp cha và lớp con phải có cùng tên hàm và số đối số. Nó dùng để thay thế phương thức cha trong lớp con . Mục đích của việc ghi đè là thay đổi hành vi của phương thức lớp cha. Hai phương thức có cùng tên và cùng tham số được gọi là ghi đè.

PHP có nạp chồng hàm không?

Nạp chồng hàm trong PHP được sử dụng để tạo động các thuộc tính và phương thức. Các thực thể động này được xử lý bằng các phương thức ma thuật có thể được sử dụng trong một lớp cho các loại hành động khác nhau. Nạp chồng hàm chứa cùng một tên hàm và hàm đó thực hiện các tác vụ khác nhau tùy theo số lượng đối số

Chúng ta có thể ghi đè các thuộc tính trong PHP không?

Có thể ghi đè thuộc tính của lớp cha từ lớp con không? . Điều không thể thực hiện được là gọi $obj->aa(); . Yes. What is not possible is calling $obj->aa(); from $obj->bb(); because $obj->aa(); is defined in the child class.

Làm cách nào bạn có thể tạo một phương thức Không thể ghi đè trong PHP?

Tránh ghi đè phương thức . using the keyword final infront of the method name prevents it from being overriden.