From 2ada61fd4dccc9de1ae15a5aff33d9ddaeed0f4f Mon Sep 17 00:00:00 2001 From: raviraaj Date: Tue, 26 Sep 2023 02:01:21 +0530 Subject: [PATCH 1/2] updated observer pattern example and docs --- readme.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 3ee4f4d..15069c9 100644 --- a/readme.md +++ b/readme.md @@ -1804,7 +1804,7 @@ Wikipedia says **Programmatic example** -Translating our example from above. First of all we have job seekers that need to be notified for a job posting +Translating our example from above. First of all we have job seekers that need to be notified for a job posting. ```php class JobPost { @@ -1837,15 +1837,17 @@ class JobSeeker implements Observer } } ``` -Then we have our job postings to which the job seekers will subscribe +Then we have our job postings to which the job seekers will subscribe. When notifying observers there are chances that Job Seeker might add another observer to observers list. To avoid exponential growth of observers list & to avoid cyclic dependency, it is always good to have copy of observers before notifying. ```php class EmploymentAgency implements Observable { protected $observers = []; protected function notify(JobPost $jobPosting) - { - foreach ($this->observers as $observer) { + { + $observersCopy = $observers->getArrayCopy(); + + foreach ($this->observers as $observersCopy) { $observer->onJobPosted($jobPosting); } } From 987b78a75d1d3e55a727b493a8fd5f27c7d990d1 Mon Sep 17 00:00:00 2001 From: raviraaj Date: Tue, 26 Sep 2023 02:22:13 +0530 Subject: [PATCH 2/2] updated typo in for loop in observer pattern example --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 15069c9..7e93480 100644 --- a/readme.md +++ b/readme.md @@ -1847,7 +1847,7 @@ class EmploymentAgency implements Observable { $observersCopy = $observers->getArrayCopy(); - foreach ($this->observers as $observersCopy) { + foreach ($observersCopy as $observer) { $observer->onJobPosted($jobPosting); } }