PHP hook, building hooks in your application
Introduction
One of the real challenges in building any type of framework, core or application is making it possible for the developers to hook into the business logic at specific points. Since PHP is not event based, nor it works with interrupts you have to come up an alternative.
The test case
Lets assume we are the main developers of a webshop framework. Programmers can use our framework to build complete webshops. Programmers can manage the orders that are placed on the webshop with the order class. The order class is part of our framework and we don’t want it to be extended by any programmer. However we don’t want to limit to programmers in their possibilities to hook into the orders process.
For example programmers should be able to send an email to the webshopowner if an order changes from one specific delivery status to another. This functionality is not part of the default behavior in our framework and is custom for the progammers webshop implementation.
Like said before, PHP doesn’t provide interrupts or real events so we need to come up with another way to implement hooks into our application. Lets take a look at the observer pattern.
Implementing the Observer pattern
The observer pattern is a design-pattern that describes a way for objects to be notified to specific state-changes in objects of the application.
For the first implementation we can use SPL. The SPL provides in two simple objects:
SPLSubject
- attach (new observer to attach)
- detach (existing observer to detach)
- notify (notify all observers)
SPLObserver
- update (Called from the subject (i.e. when it’s value has changed).
iOrderRef = $iOrderRef;
// Get order information from the database or an other resources
$this->iStatus = Order::STATUS_SHIPPED;
}
/**
* Attach an observer
*
* @param SplObserver $oObserver
* @return void
*/
public function attach(SplObserver $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (isset($this->aObservers[$sHash])) {
throw new Exception('Observer is already attached');
}
$this->aObservers[$sHash] = $oObserver;
}
/**
* Detach observer
*
* @param SplObserver $oObserver
* @return void
*/
public function detach(SplObserver $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (!isset($this->aObservers[$sHash])) {
throw new Exception('Observer not attached');
}
unset($this->aObservers[$sHash]);
}
/**
* Notify the attached observers
*
* @param string $sEvent, name of the event
* @param mixed $mData, optional data that is not directly available for the observers
* @return void
*/
public function notify()
{
foreach ($this->aObservers as $oObserver) {
try {
$oObserver->update($this);
} catch(Exception $e) {
}
}
}
/**
* Add an order
*
* @param array $aOrder
* @return void
*/
public function delete()
{
$this->notify();
}
/**
* Return the order reference number
*
* @return int
*/
public function getRef()
{
return $this->iOrderRef;
}
/**
* Return the current order status
*
* @return int
*/
public function getStatus()
{
return $this->iStatus;
}
/**
* Update the order status
*/
public function updateStatus($iStatus)
{
$this->notify();
// ...
$this->iStatus = $iStatus;
// ...
$this->notify();
}
}
/**
* Order status handler, observer that sends an email to secretary
* if the status of an order changes from shipped to delivered, so the
* secratary can make a phone call to our customer to ask for his opinion about the service
*
* @package Shop
*/
class OrderStatusHandler implements SplObserver
{
/**
* Previous orderstatus
* @var int
*/
protected $iPreviousOrderStatus;
/**
* Current orderstatus
* @var int
*/
protected $iCurrentOrderStatus;
/**
* Update, called by the observable object order
*
* @param Observable_Interface $oSubject
* @param string $sEvent
* @param mixed $mData
* @return void
*/
public function update(SplSubject $oSubject)
{
if(!$oSubject instanceof Order) {
return;
}
if(is_null($this->iPreviousOrderStatus)) {
$this->iPreviousOrderStatus = $oSubject->getStatus();
} else {
$this->iCurrentOrderStatus = $oSubject->getStatus();
if($this->iPreviousOrderStatus === Order::STATUS_SHIPPED && $this->iCurrentOrderStatus === Order::STATUS_DELIVERED) {
$sSubject = sprintf('Order number %d is shipped', $oSubject->getRef());
//mail('secratary@example.com', 'Order number %d is shipped', 'Text');
echo 'Mail sended to the secratary to help her remember to call our customer for a survey.';
}
}
}
}
$oOrder = new Order(26012011);
$oOrder->attach(new OrderStatusHandler());
$oOrder->updateStatus(Order::STATUS_DELIVERED);
$oOrder->delete();
?>
There are several problems with the implementation above. To most important disadvantage is that we have only one update method in our observer. In this update method we don’t know when and why we are getting notified, just that something happened. We should keep track of everything that happens in the subject. (Or use debug_backtrace… just joking, don’t even think about using it that way ever!).
Taking it a step further, events
Lets take a look at the next example, we will extend the Observer implementation with some an additional parameter for the eventname that occured.
Finishing up, optional data
iOrderRef = $iOrderRef;
// Get order information from the database or something else...
$this->iStatus = Order::STATUS_SHIPPED;
}
/**
* Attach an observer
*
* @param Observer_Interface $oObserver
* @return void
*/
public function attachObserver(Observer_Interface $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (isset($this->aObservers[$sHash])) {
throw new Exception('Observer is already attached');
}
$this->aObservers[$sHash] = $oObserver;
}
/**
* Detach observer
*
* @param Observer_Interface $oObserver
* @return void
*/
public function detachObserver(Observer_Interface $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (!isset($this->aObservers[$sHash])) {
throw new Exception('Observer not attached');
}
unset($this->aObservers[$sHash]);
}
/**
* Notify the attached observers
*
* @param string $sEvent, name of the event
* @param mixed $mData, optional data that is not directly available for the observers
* @return void
*/
public function notifyObserver($sEvent, $mData=null)
{
foreach ($this->aObservers as $oObserver) {
try {
$oObserver->update($this, $sEvent, $mData);
} catch(Exception $e) {
}
}
}
/**
* Add an order
*
* @param array $aOrder
* @return void
*/
public function add($aOrder = array())
{
$this->notifyObserver('onAdd');
}
/**
* Return the order reference number
*
* @return int
*/
public function getRef()
{
return $this->iOrderRef;
}
/**
* Return the current order status
*
* @return int
*/
public function getStatus()
{
return $this->iStatus;
}
/**
* Update the order status
*/
public function updateStatus($iStatus)
{
$this->notifyObserver('onBeforeUpdateStatus');
// ...
$this->iStatus = $iStatus;
// ...
$this->notifyObserver('onAfterUpdateStatus');
}
}
/**
* Order status handler, observer that sends an email to secretary
* if the status of an order changes from shipped to delivered, so the
* secratary can make a phone call to our customer to ask for his opinion about the service
*
* @package Shop
*/
class OrderStatusHandler implements Observer_Interface
{
protected $iPreviousOrderStatus;
protected $iCurrentOrderStatus;
/**
* Update, called by the observable object order
*
* @param Observable_Interface $oObservable
* @param string $sEvent
* @param mixed $mData
* @return void
*/
public function update(Observable_Interface $oObservable, $sEvent, $mData=null)
{
if(!$oObservable instanceof Order) {
return;
}
switch($sEvent) {
case 'onBeforeUpdateStatus':
$this->iPreviousOrderStatus = $oObservable->getStatus();
return;
case 'onAfterUpdateStatus':
$this->iCurrentOrderStatus = $oObservable->getStatus();
if($this->iPreviousOrderStatus === Order::STATUS_SHIPPED && $this->iCurrentOrderStatus === Order::STATUS_DELIVERED) {
$sSubject = sprintf('Order number %d is shipped', $oObservable->getRef());
//mail('secratary@example.com', 'Order number %d is shipped', 'Text');
echo 'Mail sended to the secratary to help her remember to call our customer for a survey.';
}
}
}
}
$oOrder = new Order(26012011);
$oOrder->attachObserver(new OrderStatusHandler());
$oOrder->updateStatus(Order::STATUS_DELIVERED);
$oOrder->add();
?>
Now we are able to take action on different events that occur.
Disadvantages
Although this implementation works quite well there are some drawbacks. One of those drawbacks is that we need to dispatch an event in our framework, if we don’t programmers can’t hook into our application. Triggering events everywhere give us a small performance penalty however I do think this way of working gives the programmers a nice way to hook into your application on those spots that you want them to hook in.
Just for the record
Notice that this code is just an example and can still use some improvements, for example: each observer is initialized even it will maybe never be notified, therefore I suggest to make use of lazy in some cases for loading the objects. There are other systems to hook into an application, more to follow!
купить диплом инженера механика [url=http://rudik-diplom8.ru/]купить диплом инженера механика[/url] .
Diplomi_uyMt
2 Nov 25 at 1:22 pm
можно ли купить диплом медсестры [url=www.frei-diplom13.ru]можно ли купить диплом медсестры[/url] .
Diplomi_nxkt
2 Nov 25 at 1:22 pm
Wah lao, mathematics serves as one in the highly importantt topics ɑt Junior College, assisting
children grasp sequences ᴡhich remain key in STEM roles subsequently on.
Yishun Innova Junior College combines strengths f᧐r digijtal literacy and management excellence.
Updated centers promote development ɑnd lifelong learning.
Diverse programs іn media and languages foster creativity ɑnd citizenship.
Neighborhood engagements construct compassion аnd skills.
Trainees emerge ɑs positive, tech-savvy leaders ready foг the digital age.
Anglo-Chinese Junior College acts ɑs аn excellent model օf holistic education, effortlessly incorporating ɑ challenging scholastic curriculum ᴡith
а caring Christian structure tһat supports ethical worths, ethical decision-mаking, and a sense
оf function in eѵery trainee. Ꭲһe college iѕ geared up ԝith cutting-edge facilities, including modern-Ԁay lecture theaters, ᴡell-resourced
art studios, and higһ-performance sports complexes, ԝhere seasoned educators direct
students tο attain impressive lead tо disciplines ranging
from tһe humanities tο tһe sciences, typically earning national аnd global awards.
Traineess аre encouraged to tаke ρart in a abundant
range of after-school activities, ѕuch as competitive sports ցroups that construct
physical endurance аnd team spirit, аlong with performing arts ensembles that promote artistic expression аnd cultural
appreciation, ɑll adding to a balanced lifestyle filled ԝith enthusiasm and discipline.
Throuɡh tactical international partnerships, consisting օf trainee exchange programs ᴡith partner schools abroad аnd participation іn worldwide conferences,
tһe college imparts a deep understanding of
divere cultures ɑnd international issues, preparing students tο browse an increasingly interconnected ѡorld with grace and insight.
The remarkable performance history օf its alumni,
ᴡhο master management functions tһroughout industries ⅼike business, medication, ɑnd the arts,
highlights Anglo-Chinese Junior College’ѕ profound influence іn establishing principled, innovative leaders ԝһo make
favorable influence on society аt ⅼarge.
Mums ɑnd Dads, dread the difference hor, math base rеmains critical duгing Junior College for comprehending figures,
vital witһіn today’s digital systеm.
Goodness, no matter іf school іѕ atas, math serves ɑs the critical subject tߋ building
poise rеgarding calculations.
Oi oi, Singapore folks, math гemains ⅼikely the most
imp᧐rtant primary topic, promoting innovation tһrough challenge-tackling
to groundbreaking careers.
Alas, primary math teaches practical applications ѕuch аs
money management, ѕo guarantee your child gеts this properly fгom young.
Hey hey, calm pom ρi pі, mathematics proves ɑmong оf the tⲟp topics at Junior
College, building base tⲟ A-Level higher calculations.
Math trains abstraction, key fߋr philosophy and law too.
Mums and Dads, dread tһe difference hor, math groundwork гemains essential іn Junior College fоr comprehending іnformation, crucial fоr modern online sʏstem.
Goodness, еven if school rеmains fancy, mathematics іs tһe
decisive subject fⲟr developing confidence regarding numbers.
my site: Bartley Secondary School
Bartley Secondary School
2 Nov 25 at 1:23 pm
his eyes glowed,he was exhausted in every limb,ロボット エロ
ロボット セックス
2 Nov 25 at 1:23 pm
каталог seo агентств [url=https://reiting-seo-kompaniy.ru/]https://reiting-seo-kompaniy.ru/[/url] .
reiting seo kompanii_cgon
2 Nov 25 at 1:23 pm
online pharmacy ireland: online pharmacy – online pharmacy ireland
Johnnyfuede
2 Nov 25 at 1:23 pm
Wah, maths serves as the foundation stone іn primary education, helping kids ѡith dimensional thinking fоr design careers.
Оh dear, lacking robust maths іn Junior College, no matter
tߋp institution children mіght falter in hiɡh school calculations, sߋ cultivate it immеdiately leh.
Victoria Junior College cultivates imagination аnd management,
firing uρ passions for future development.
Coastal campus facilities support arts, liberal arts, аnd
sciences. Integrated programs ᴡith alliances provide smooth,enriched education. Service аnd global initiatives construct caring, durable individuals.Graduates lead ѡith conviction, achieving impressive success.
Anglo-Chinese School (Independent) Junior College delivers
аn improving education deeply rooted іn faith, wheгe intellectual exploration іs harmoniously
balanced ԝith core ethical principles, guiding
students tоward becoming compassionate аnd accountable international people geared սρ tߋ attend to intricate social
difficulties. Ƭhe school’s prestigious International
Baccalaureate Diploma Programme promotes advanced crucial thinking, research skills, аnd interdisciplinary learning, bolstered Ьy
extraordinary resources like devoted innovation hubs and professional professors wh᧐ mentor
students in achieving academic difference. А broad spectrum ߋf co-curricular offerings,
fгom innovative robotics cluƄs that encourage technological creativity tο chamber orchestra tһat refine musical talents,
permits students tо discover аnd refine their distinct abilities іn a
supportive and revitalizing environment. Вy incorporating service
knowing efforts, suich аs community outreach jobs аnd volunteer programs Ƅoth іn your
area and internationally, the college cultivates а strong
sense оf social obligation, compassion, ɑnd active citizenship
аmong its trainee body. Graduates of Anglo-Chinese School (Independent) Junior College ɑгe
exceptionally weⅼl-prepared f᧐r entry intо elite universities
alll оver the world, brіng witһ them ɑ distinguished tradition οf academic excellence, personal integrity, ɑnd a dedication to long-lasting
knowing and contribution.
Hey hey, steady pom ρi pі, maths proves ɑmong
fr᧐m the leading subjects іn Junior College, laying groundwork f᧐r
A-Level advanced math.
Ӏn adⅾition beyond establishment facilities, concentrate ѡith math in оrder tⲟ prevent common pitfalls including sloppy
blunders ⅾuring exams.
Oh dear, mіnus robust math ɑt Junior College, гegardless leading institution youngsters ϲould stumble ɑt secondary algebra, tһus develop thɑt
promptly leh.
Listen up, Singapore folks, math remains рerhaps tһe highly
crucial primary discipline, encouraging imagination fօr problem-solving for creative jobs.
In additі᧐n from institution amenities, concentrate οn mathematics in order
tߋ avoid typical mistakes including careless mistakes
аt tests.
Kiasu mindset іn JC tᥙrns pressure intο A-level motivation.
Parents, dread tһе disparity hor, maths foundation іs critical аt Junior
College іn grasping data, essential for modern tech-driven market.
Goodness, even wһether establishment proves atas, math serves ɑs tһe critical topic for building assurance іn numƄers.
Check ᧐ut my homepage – Catholic Junior College
Catholic Junior College
2 Nov 25 at 1:24 pm
seo агентство топ [url=https://reiting-seo-kompaniy.ru]https://reiting-seo-kompaniy.ru[/url] .
reiting seo kompanii_ehon
2 Nov 25 at 1:25 pm
купить диплом с занесением в реестр барнаул [url=http://frei-diplom5.ru/]купить диплом с занесением в реестр барнаул[/url] .
Diplomi_gdPa
2 Nov 25 at 1:25 pm
affordable medication Ireland
Edmundexpon
2 Nov 25 at 1:27 pm
купить проведенный диплом в красноярске [url=www.frei-diplom4.ru/]www.frei-diplom4.ru/[/url] .
Diplomi_npOl
2 Nov 25 at 1:28 pm
купить диплом в сургуте [url=https://rudik-diplom14.ru]купить диплом в сургуте[/url] .
Diplomi_fpea
2 Nov 25 at 1:28 pm
купить аттестат школы [url=http://rudik-diplom8.ru]купить аттестат школы[/url] .
Diplomi_efMt
2 Nov 25 at 1:28 pm
где купить диплом техникума будь [url=http://www.frei-diplom8.ru]где купить диплом техникума будь[/url] .
Diplomi_gcsr
2 Nov 25 at 1:29 pm
натяжные потолки недорого нижний новгород цена [url=https://natyazhnye-potolki-nizhniy-novgorod-1.ru]https://natyazhnye-potolki-nizhniy-novgorod-1.ru[/url] .
natyajnie potolki nijnii novgorod_rama
2 Nov 25 at 1:29 pm
Irish online pharmacy reviews [url=http://irishpharmafinder.com/#]buy medicine online legally Ireland[/url] affordable medication Ireland
Hermanengam
2 Nov 25 at 1:30 pm
I’ll right away take hold of your rss as I can not to find your e-mail
subscription hyperlink or newsletter service. Do you’ve any?
Kindly let me recognize in order that I could subscribe.
Thanks.
Shop the full collection
2 Nov 25 at 1:31 pm
verified online chemists in Australia: verified pharmacy coupon sites Australia – Australian pharmacy reviews
HaroldSHems
2 Nov 25 at 1:31 pm
лучшие seo компании [url=https://reiting-seo-kompaniy.ru/]reiting-seo-kompaniy.ru[/url] .
reiting seo kompanii_juon
2 Nov 25 at 1:31 pm
топ seo агентств [url=luchshie-digital-agencstva.ru]luchshie-digital-agencstva.ru[/url] .
lychshie digital agentstva_ufoi
2 Nov 25 at 1:32 pm
https://yurhelp.in.ua/
SteveWex
2 Nov 25 at 1:34 pm
Awesome article.
sewa alphard murah
2 Nov 25 at 1:34 pm
диплом колледжа 2016 купить [url=www.frei-diplom8.ru/]www.frei-diplom8.ru/[/url] .
Diplomi_oesr
2 Nov 25 at 1:34 pm
cheapest pharmacies in the USA [url=https://safemedsguide.com/#]Safe Meds Guide[/url] compare online pharmacy prices
Hermanengam
2 Nov 25 at 1:35 pm
сео продвижение сайтов топ 10 [url=https://reiting-kompanii-po-prodvizheniyu-sajtov.ru/]сео продвижение сайтов топ 10[/url] .
agentstvo poiskovogo prodvijeniya_aqKt
2 Nov 25 at 1:35 pm
агентство продвижения сайтов [url=https://reiting-kompanii-po-prodvizheniyu-sajtov.ru/]агентство продвижения сайтов[/url] .
agentstvo poiskovogo prodvijeniya_boKt
2 Nov 25 at 1:37 pm
GOOD88 không chỉ là nơi cá cược mà còn là cộng đồng kết nối người yêu thích may rủi.
GOOD88
2 Nov 25 at 1:38 pm
Uk Meds Guide: best UK pharmacy websites – UK online pharmacies list
HaroldSHems
2 Nov 25 at 1:40 pm
купить диплом техникума в рязани [url=www.frei-diplom8.ru]купить диплом техникума в рязани[/url] .
Diplomi_wnsr
2 Nov 25 at 1:42 pm
https://t.me/s/kfo_1win
StevenHig
2 Nov 25 at 1:42 pm
1xbet turkiye [url=https://1xbet-giris-2.com/]1xbet-giris-2.com[/url] .
1xbet giris_fuPt
2 Nov 25 at 1:43 pm
лучшие агентства seo продвижения [url=https://reiting-seo-kompaniy.ru/]https://reiting-seo-kompaniy.ru/[/url] .
reiting seo kompanii_apon
2 Nov 25 at 1:44 pm
1xbet yeni giri? [url=https://1xbet-giris-4.com]1xbet yeni giri?[/url] .
1xbet giris_dnSa
2 Nov 25 at 1:45 pm
https://t.me/s/kta_1win
StevenHig
2 Nov 25 at 1:45 pm
Oh no, primary math teaches practical ᥙsеs including financial
planning, tһսs guarantee ʏߋur youngster masters tһat right fгom early.
Hey hey, composed pom ρі pi, math гemains among in the leading topics іn Junior College,
building foundation tо A-Level advanced math.
Singapore Sports Schhool balances elite athletic training ѡith rigorous academics,
nurturing champions іn sport and life. Personalised paths make
sure versatile scheduling fߋr competitions ɑnd reseɑrch studies.
Wⲟrld-class facilities аnd coaching support peak efficiency аnd personal development.
International direct exposures build strength
аnd global networks. Students graduate ɑs disciplined leaders, ready fоr expert sports or college.
Hwa Chong Institution Junior College іs celebrated fօr іts smooth
integrated program tһat masterfully combines extensive academic difficulties ԝith
extensive character development, cultivating ɑ new generation օf worldwide scholars ɑnd ethical leaders ԝho arе equipped to deal ѡith compllex global pгoblems.
Тhe organization boasts wⲟrld-class facilities,
including innovative reserch centers, multilingual
libraries, аnd development incubators, wherе highly qualified faculty
guide trainees tߋwards quality in fields ⅼike clinical
гesearch study, entrepreneurial endeavors, ɑnd cultural
studies. Trainees gain indispensable experiences tһrough comprehensive worldwide exchange programs, worldwide competitors іn mathematics ɑnd sciences, аnd
collective jobs that expand tһeir horizons and
fine-tune thеіr analytical аnd interpersonal skills.
Вy emphasizing development tһrough efforts ⅼike student-led start-ups and
innovation workshops, ɑⅼong ѡith service-oriented activities tһat promote social duty, tһe college builds strength,
adaptability, аnd ɑ strong ethical foundation іn itѕ learners.
The vazt alumni network ߋf Hwa Chong Institution Junior College оpens paths tо elite universitties
аnd influential professions tһroughout the worⅼd, highlighting the school’ѕ sustaining tradition ᧐f cultivating intellectual expertise аnd principled management.
Hey hey, Singapore moms ɑnd dads, mathematics proves ⅼikely the
most іmportant primary topic, encouraging innovation іn challenge-tackling іn groundbreaking careers.
Folks, dread tһe disparity hor, maths base remains critical at Junior College fߋr comprehending data,
crucial in modern digital market.
Օh man, regardless if establishment proves atas,
math serves аѕ tһe make-ⲟr-break subject for cultivates assurance in figures.
Parents, kiasu mode activated lah, solid primary mathematics leads inn improved scientific grasp аnd construction aspirations.
Wow, math serves ɑs the foundation stone foг primary
learning, aiding children foг spatial reasoning іn architecture
routes.
А-level hiɡh achievers often become mentors, ɡiving bаck to
the community.
Avօid play play lah, pair ɑ goⲟd Junior College wіth maths excellence in ordеr to assure superior А Levels scores аѕ wеll as smooth transitions.
Parents, worry aboᥙt the disparity hor, mathemawtics foundation іs vital
in Junior College to grasping figures, crucial ѡithin modern digital systеm.
Also visit my webpage … St. Andrew’s Junior College
St. Andrew’s Junior College
2 Nov 25 at 1:46 pm
лучшие seo агентства [url=http://reiting-seo-kompaniy.ru]лучшие seo агентства[/url] .
reiting seo kompanii_taon
2 Nov 25 at 1:46 pm
This blog was… how do you say it? Relevant!! Finally I have found something
which helped me. Thanks a lot!
online slots casino
2 Nov 25 at 1:46 pm
cheap medicines online Australia: cheap medicines online Australia – trusted online pharmacy Australia
Johnnyfuede
2 Nov 25 at 1:48 pm
купить диплом в казани [url=http://rudik-diplom6.ru/]купить диплом в казани[/url] .
Diplomi_alKr
2 Nov 25 at 1:48 pm
школа английского в москве [url=http://dubna.ru/article/2025/09/kak-vybrat-shkolu-angliyskogo-yazyka-dlya-detey-i-podrostkov/]http://dubna.ru/article/2025/09/kak-vybrat-shkolu-angliyskogo-yazyka-dlya-detey-i-podrostkov/[/url] .
shkoli angliiskogo yazika_dksn
2 Nov 25 at 1:48 pm
топ seo продвижение низкие цены [url=https://reiting-kompanii-po-prodvizheniyu-sajtov.ru/]https://reiting-kompanii-po-prodvizheniyu-sajtov.ru/[/url] .
agentstvo poiskovogo prodvijeniya_apKt
2 Nov 25 at 1:49 pm
Курсы гитары под руководством профессиональных педагогов — от первых аккордов до сцены. https://shkola-vocala.ru/shkola-igry-na-gitare.php
https://shkola-vocala.ru/shkola-igry-na-gitare.php
2 Nov 25 at 1:49 pm
купить диплом во владимире [url=www.rudik-diplom13.ru]купить диплом во владимире[/url] .
Diplomi_ukon
2 Nov 25 at 1:51 pm
seo agencies ranking [url=https://reiting-seo-kompaniy.ru/]seo agencies ranking[/url] .
reiting seo kompanii_opon
2 Nov 25 at 1:51 pm
школы английского языка [url=www.vkirove.ru/news/2025/09/28/kak_vybrat_shkolu_angliyskogo_yazyka_prakticheskie_sovety.html/]www.vkirove.ru/news/2025/09/28/kak_vybrat_shkolu_angliyskogo_yazyka_prakticheskie_sovety.html/[/url] .
shkoli angliiskogo yazika_dppi
2 Nov 25 at 1:54 pm
рейтинг seo услуг [url=http://reiting-seo-kompaniy.ru/]http://reiting-seo-kompaniy.ru/[/url] .
reiting seo kompanii_mmon
2 Nov 25 at 1:55 pm
медсестра которая купила диплом врача [url=https://frei-diplom13.ru/]медсестра которая купила диплом врача[/url] .
Diplomi_fhkt
2 Nov 25 at 1:55 pm
My coder is trying to convince me to move to .net from PHP.
I have always disliked the idea because of the costs. But he’s tryiong
none the less. I’ve been using WordPress on several websites for about
a year and am worried about switching to another platform.
I have heard excellent things about blogengine.net.
Is there a way I can transfer all my wordpress posts into it?
Any kind of help would be really appreciated!
나가사키 유흥
2 Nov 25 at 1:56 pm
https://ukmedsguide.shop/# UkMedsGuide
Haroldovaph
2 Nov 25 at 1:56 pm
https://t.me/s/tf_1win
StevenHig
2 Nov 25 at 1:57 pm