Witam,
Spotakałem się z dwoma zapisami typu:
$this->name
i $this->$name
jaka jest różnica między nimi.
Pierwsze odwołuje się do atrubutu name
bieżącego obiektu, drugie odwołuje się do atrybutu, którego nazwa zapisana jest w zmiennej $name
.
Czesc, sam staram sie dobrze rozumiem slowo 'this' w jezyku programowania.
class App {
protected $controller = 'home';
protected $method = 'index';
protected $params = [];
public function __construct(){
$url = $this->parseUrl();
if(file_exists('../'.$url[0].'.php')){
$this->controller = $url[0];
unset($url[0]);
}
}
public function parseUrl(){
if(isset($_GET['url'])){
return $url = explode('/',filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
}
}
Teraz jak ja tlumacze slowko 'this' w tym kodzie.
$url = $this->parseUrl();
Do zmiennej $url w konstruktorze przypisujemy ta metode parseUrl(). Lecz tylko w tym konstruktorze.
$this->controller = $url[0];
Atrybut dzialajacy w tym kontrolerze rowna sie zmiennej url ktora zdefiniowalismy wczesniej o indeksie tablicy tablicy $_GET 0 - czyli pierwszej, zaraz po znaku "/".
Jesli zle rozumiem kod, prosze o poprawienie mnie.
Nie przypisujemy
, tylko wywołujemy
jak coś.
A niżej równa się
- to mógłbyś powiedzieć przy sprawdzaniu czy się równa. W tym przypadku robisz przypisanie
.
A swoją drogą FILTER_SANITIZE_URL
z tego co widzę w dokumentacji nie uchroni Cię przed błędem directory traversal
.
Dziekuje bardzo za odpowiedz. Ucze sie dopiero, musi mi sie to wszystko poukladac w glowie. Jaka jest alternatywa, nowoczesniejsza metoda dla FILTER_SANITIZE_URL?