<?php
class Location {
public $lat, $lon, $name;
public function __construct($lat, $lon, $name='') {
$this->lat = $lat;
$this->lon = $lon;
$this->name = $name;
}
public function getDistanceTo(Location &$obj) {
$lat1 = $this->lat * M_PI / 180;
$lon1 = $this->lon * M_PI / 180;
$lat2 = $obj->lat * M_PI / 180;
$lon2 = $obj->lon * M_PI / 180;
$d_lon = $lon1 - $lon2;
$slat1 = sin($lat1);
$slat2 = sin($lat2);
$clat1 = cos($lat1);
$clat2 = cos($lat2);
$sdelt = sin($d_lon);
$cdelt = cos($d_lon);
$y = pow($clat2 * $sdelt, 2) + pow($clat1 * $slat2 - $slat1 * $clat2 * $cdelt, 2);
$x = $slat1 * $slat2 + $clat1 * $clat2 * $cdelt;
return atan2(sqrt($y), $x) * 6372795 / 1000; // в км.
}
};
$objects = [
new Location(55.7518, 37.6176, 'Московский Кремль'),
new Location(55.7702, 37.5952, 'м. Маяковская'),
new Location(55.7621, 37.8555, 'Реутов'),
new Location(55.6592, 37.6626, 'Коломенское'),
new Location(55.8549, 37.4761, 'м. Речной вокзал'),
new Location(55.9088, 37.7332, 'Мытищи'),
];
$current = new Location(55.7800, 37.6138);
$maxDistance = 12; // в километрах
foreach ($objects as $obj) {
$dist = $obj->getDistanceTo($current);
if ($dist < $maxDistance) {
echo sprintf("%s (%0.2f км)<br>", $obj->name, $dist);
}
}
unset()
помечает переменную как более неиспользуемую, что влечёт вызов деструктора объекта.<?php
class Foo {
function __construct() {
print("Object created\n");
}
function __destruct() {
print("Object destroyed\n");
}
}
$foo = new Foo();
print("Before unset()\n");
unset($foo);
print("After unset()\n");
Object created
Before unset()
Object destroyed
After unset()
unset()
деструктор будет вызван при выходе переменной из области видимости (т.е. в данном примере - при завершении работы скрипта). $new_arr = [];
foreach ($arr['description'] as $desc) {
$tmp = $arr;
$tmp['description'] = $desc;
$new_arr[] = $tmp;
}
<?php
function head ( $name ){
echo '<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>';
hello();
echo '</title>
<script src="/libs/jquery.min.js"></script>
<script src="/scripts/ajax.js"></script>
<script src="/scripts/ajax-rdct.js"></script>
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<link href="/style/pages.css" media="screen" rel="stylesheet">
</head>
<body>';}
develop
и production
. У себя работаете только с веткой develop
. Когда сделали и протестировали некоторый новый функционал, мержите всё это дело в production
. И ещё добавьте хук для автоматического обновление файлов на рабочем сервере при изменениях ветки production
(возможно ещё применение миграций БД потребуется (если используете) и пр.). $array_temp += get_cat_recursive($value['id'], $array_check, $array_temp);
function get_cat_recursive($id_check, &$array_check, &$array_temp)
{
foreach ($array_check as $key => $value) {
if ( $id_check == $value['parent_id']) {
array_push($array_temp, $value['id']);
get_cat_recursive($value['id'], $array_check, $array_temp);
}
}
}
// Использование
$result = []; // При первом вызове функции передаём пустой массив
get_cat_recursive(2, $all_cats, $result);
print_r($result);
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://httpbin.fuze.com/cookies');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Если передать заданные куки, то так:
curl_setopt($curl, CURLOPT_COOKIE, "cookiename1=cookievalue1;cookiename2=cookievalue2");
// Если нужно автоматически сохрянять и отправлять (как это делает браузер), тогда так:
curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookie.txt");
$response = curl_exec($curl);
var_dump($response);
curl_close($curl);
// ...
$post_data = array(
'states' => array_values($_GET['status']),
'date_begin' => $date_begin->format("d.m.Y 00:00:00"),
'date_end' => $date_end->format("d.m.Y 23:59:59")
);
// ...