class TaskType extends Model
{
public function tasks()
{
return $this->hasMany('App\Models\Task');
}
}
class Task extends Model
{
public function type() {
return $this->belongsTo('App\Models\TaskType');
}
}
class Hook {
protected $callbacks;
public function __construct($callbacks = []) {
$this->callbacks = [];
if (!isset($callbacks) || !is_array($callbacks) || sizeof($callbacks)) {
return;
}
foreach ($callbacks as $k => $v) {
if (!is_string($k) || !isset($v) || !is_callable($v)) {
continue;
}
$this->callbacks[$k] = $v;
}
}
public function add($key, $callback) {
if (!isset($key) || !isset($callback) || !is_string($key) || !is_callable($callback)) {
return;
}
$this->callbacks[$key] = $callback;
}
public function remove($key) {
if ($this->exists($key)) {
unset($this->callbacks[$key]);
}
}
public function exists($key) {
return isset($key) && array_key_exists($key, $this->callbacks);
}
public function run($key, ...$args) {
if ($this->exists($key)) {
$func = $this->callbacks[$key];
if (!isset($args) || !is_array($args)) {
$args = [];
}
if (isset($func)) {
$func(...$args);
}
}
}
}
$hook = new Hook();
$hook->add("my_hook", function ($args) {
// todo
});
$hook->run("my_hook");
$hook->run("my_hook", 1, "string", true);
<?php
function getProtocol()
{
if ($_SERVER['HTTPS'] == '') {
return 'http';
} else {
return 'https';
}
}
$protocol = getProtocol(); // Объявляем переменную protocol, которой присваиваем возвращаемое значение ф-и getProtocol
echo $protocol; // Выводим переменную на экран
// Можно и не объявлять переменную - можно просто сделать echo getProtocol();
// Но если значение будет использоваться более одного раза, то следует объявить переменную.
?>
$str = 'case:s:webima:http://pk.ve.someurl.com:80/demo,on1_hhh_5@s36016,mob:webima:http://pk.ve.someurl.com:80/demo,t_k275292400,pr:webima:http://pk.ve.someurl.com:80/demo,on0_SHM_12@s36018,default:webima:http://pk.ve.someurl.com:80/demo,5554897363a';
preg_match_all('/http:[^,]*,[^,]*/', $str, $matches);
print_r($matches[0]);
http:[^,]*,[^,]*
http:
— ищем шаблон, который бы начинался с «http:».[^,]*
— ищем последовательность символов, в которой отсутствует запятая. Квадратные скобочки — это синтаксис определения возможных символов, из которых может состоять последовательность. Например [abc] — это шаблон одного символа, который совпадает с только с одной из букв «a», «b» или «c». Крышечка «^» — отрицание присутствия перечисленных символов. Звездочка «*» обозначает повторяемость этого символа от 0 до бесконечного числа раз.,
— просто ищем запятую.[^,]*
— см. п. 2. Т.е. в конце должна идти последовательность, которая не содержит запятые.