Смотри пример class myClass { static $arr = array(); function __construct(){ global $db; $sql = $db->query("SELECT * FROM table"); foreach( $sql->rows AS $row){ $id = $row['id']; self::$arr[$id] = $row; } } public function any_method(){ $myarr = self::$arr; print_r($myarr); }} Здесь, например мне нужно перебрать всю таблицу. Вместо того чтобы каждый раз делать запрос. Я получил все строки и поместил в массив с ключем как индекс. Да, конечно, я мог и передать эту переменную в функцию, но мне все равно данный массив ещё не раз потребуется, поэтому я сохраняю его так. И что получается, а получается, что метод any_method? будет заточен только на эту одну переменную. (но можно же и сделать дополнительную переменную под неё, но считаю что это не очень красиво, всё дублировать). Если у меня такие задачи, то я с вероятностью 98% сделаю так. мне так удобнее. Но если же, у меня данная функция будет работать с независимыми переменными, а не только с одной глобальной, то естественно лучше передавать параметром