PHP
Все годы пытался его избегать, чтобы не тратить время и силы на изучение "полуживого языка программирования", но все же пришлось немного покопаться.
Заметки без опыта:
null это тоже значение
Для полного удаления используется unset()
, а не arr[key] = null
isset($arr['key']) // вернет false, если key == null
array_key_exists('key', $arr) // вернет true, если key == null
Упрощенный способ выполнить GET запрос:
$json_body = file_get_contents($url);
$data = json_decode($json_body);
Namespace
Если правильно понял, то это чтобы не было коллизий имен в одном проекте. Например, если один класс есть в нескольких местах
В Laravel вроде желательно указывать в каждом файле
namespace App\Services;
// \App\Services\ClassName
class ClassName {
...
}
use
Можно делать сверху use App\Project
, затем в коде Project::blabla
А можно без use сразу \App\Project::blabla
Traits
"Кусочки" кода, которые можно подключить к любому классу.
Позволяет подключать к классу сразу несколько наборов методов.
Воспринимаю как простой инжект функционала.
namespace App\Traits;
trait TraitName {
private function foo($bla) {
return $bla;
}
}
namespace App\Services;
use App\Traits\TraitName;
class SomeService {
use TraitName;
private function bar($bla2) {
return $this->foo($bla2);
}
}
Расположение файла
где разместить файл влияет только на то, что он там размещен или дает файлу какое-то особое свойство?
Вроде особых свойств нет. Т.е. любой файл в теории может быть расположен где угодно в проекте
public/private static function
- private функции доступны в пределах класса?
- public функции доступны извне
- static говорит, что функцию можно вызвать без new ClassName();, просто через ClassName::functionName();
Но для трейтов это почему-то работает иначе. Наверное, трейты именно передают в классы, где используются функции "как есть"