if ( $zip->open('./wp-content/uploads/myzip.zip', ZipArchive::CREATE) !== true) {
throw new \RuntimeException("Cannot open file");
}
interface MessageProviderInterface {
public function sendMessage($from, $to, $text);
}
class Email implements MessageProviderInterface{}
class File implements MessageProviderInterface{}
class NewService {
private MessageProviderInterface $provider;
public function __construct(MessageProviderInterface $provider) {
$this->provider = $provider;
}
}
$provider = getenv('ENV') === 'DEBUG' ? new FileProvider() : new EmailProvider();
$service = new NewService($provider);
class Test{
private $id = 10;
public function __get( $name ){
$name = ucfirst($name);
return call_user_func( [ $this, "get{$name}"] );
}
public function getId(){
return $this->id * 10;
}
}
$t = new Test();
echo $t->id; // Out 100
Это совсем утрированный пример. Так можно getId сделать protected или private. и внутри метода творить что угодно. а ощущение будет что обращаются к свойству. Ну и т.д. c __isset __unset __set и прочими.
__sleep __wakeup ещё не доводилось на практике использовать, но где-то несомненно могут понадобятся.
foreach( $links as $link ){
if( stripos( $link, $siteName ) === false ){
if( preg_match('#^(http\:\/\/|https\:\/\/)#', $link) ){
// Some actions
}
}
}
<a href="/ticket/accept.php?ticketId=3&employeeId=65">Выбрать исполнителя</a>
--- Удаляем всех кроме мастера которого выбрали для подтверждения заказа
DELETE FROM order_employers WHERE orderId = :ticketId and employeeId<> :employeeId;
--- Обновляем статус тикета(заказа). Говорим что запись в этот тикет закончена, исполнитель выбран
--- Для статуса лучше использовать какой-нибудь INT и связанную таблицу со статусами.
UPDATE order SET status='Выбран исполнитель' where ticketId = :ticketId;