1 Востаннє редагувалося savelikan (18.01.2015 15:52:29)

Тема: Область видимості

Привіт усім!

function abc(){
 $a = 'text_1';
 $b = 'text_2';
}

як заставити $a и $b бути доступними за межами функції? Я робив ось так:

function abc(){
 $return['a'] = 'text_1';
 $return['b'] = 'text_2';
 RETURN $return;
}

$temp = function abc();
$a = $temp['a'];
$b = $temp['b'];

може є простіший спосіб?

2

Re: Область видимості

http://www.w3schools.com/php/php_superglobals.asp

Але, як на мене, глобальних змінних слід уникати, тому ваш пайтонівський стиль мені подобається більше )

Подякували: quez1

3 Востаннє редагувалося VTrim (18.01.2015 16:12:42)

Re: Область видимості

function abc(){
global $a,$b;
 $a = 'text_1';
 $b = 'text_2';
}
abc();
echo $a.$b;
Подякували: koala, savelikan2

4

Re: Область видимості

Правильно робити отак:

function a() {
    $GLOBALS['global'] = 'FFFFF';
}
a();
echo $global;

5

Re: Область видимості

Для чого взагалі області видимості? - Для того щоб не плутатись у вашому коді.

Важко заплутатись у 10-ти рядках коду, але дуже легко це зробити, якщо ваш код, скажімо, хоча б не вміщається на одному екрані монітора. Бо дуже часто програміст в своїй роботі використовує звичні для нього імена змінних.

З появою ООП у PHP, ще більше додалось областей видимості, і все це робиться для тієї ж самої мети - не плутати змінні, які виконують різні призначення, але мають однакові імена.

Свого часу я точно так само як і ви хотів щоб все кругом було доступно. Але все ж необхідно приділити час для вивчення областей видимості, це варте того.

6

Re: Область видимості

Master_Sergius написав:

http://www.w3schools.com/php/php_superglobals.asp

Але, як на мене, глобальних змінних слід уникати, тому ваш пайтонівський стиль мені подобається більше )

Хороший стиль в одній мові може бути бидлокодом в іншій.
Не варто створювати велосипед,якщо сама мова дає інструменти для вирішення тієї чи іншої задачі.

7

Re: Область видимості

ktretyak написав:

Для чого взагалі області видимості? - Для того щоб не плутатись у вашому коді.

Важко заплутатись у 10-ти рядках коду, але дуже легко це зробити, якщо ваш код, скажімо, хоча б не вміщається на одному екрані монітора. Бо дуже часто програміст в своїй роботі використовує звичні для нього імена змінних.

З появою ООП у PHP, ще більше додалось областей видимості, і все це робиться для тієї ж самої мети - не плутати змінні, які виконують різні призначення, але мають однакові імена.

Свого часу я точно так само як і ви хотів щоб все кругом було доступно. Але все ж необхідно приділити час для вивчення областей видимості, це варте того.

та я щось ніяк не можу зрозуміти це ООП і в яких випадках і як правильно його використовувати на практиці

8

Re: Область видимості

VTrim написав:

Хороший стиль в одній мові може бути бидлокодом в іншій.

Так, але не у випадку глобальних змінних.

9

Re: Область видимості

quez написав:
VTrim написав:

Хороший стиль в одній мові може бути бидлокодом в іншій.

Так, але не у випадку глобальних змінних.

Вам дають інструмент,а ви самі вирішуєте,користуватись ним,чи ні.

10

Re: Область видимості

savelikan написав:

та я щось ніяк не можу зрозуміти це ООП і в яких випадках і як правильно його використовувати на практиці

Ось це розуміння потреби використання ООП, якраз дуже близько стосується теми "області видимості".

Як правило новачкам не зрозуміло для чого воно, бо вони роблять якісь досить маленькі проекти щоб заплутатись в них. ООП просто додатково розділяє області видимості для випадку, коли у вас є великий проект.

Грубо кажучи, область видимості повинна приблизно дорівнювати області видимості програмістом свого проекту в певній функції, яку він програмує.

Подякували: truesupport1

11

Re: Область видимості

ktretyak написав:
savelikan написав:

та я щось ніяк не можу зрозуміти це ООП і в яких випадках і як правильно його використовувати на практиці

Ось це розуміння потреби використання ООП, якраз дуже близько стосується теми "області видимості".

Як правило новачкам не зрозуміло для чого воно, бо вони роблять якісь досить маленькі проекти щоб заплутатись в них. ООП просто додатково розділяє області видимості для випадку, коли у вас є великий проект.

Грубо кажучи, область видимості повинна приблизно дорівнювати області видимості програмістом свого проекту в певній функції, яку він програмує.

ну наприклад при написанні сторінки реєстрації користувачів, активації їх сторінки і авторизації де ООП може пригодитися?

12

Re: Область видимості

savelikan написав:

ну наприклад при написанні сторінки реєстрації користувачів, активації їх сторінки і авторизації де ООП може пригодитися?

Як я і написав вище - орієнтуйтесь по собі. Якщо ви легко справляєтесь і без ООП, то не використовуйте його, бо це сповільнить роботу ваших скриптів.

Але якщо ви вже починаєте плутатись в коді, або якщо є ймовірність, що проект буде рости, то варто спробувати ООП.

13 Востаннє редагувалося Vo_Vik (19.01.2015 04:58:22)

Re: Область видимості

В функціональному програмуванін можна зробити так:

function abc(&$a, &$a)
 $a= 'text_1';
 $b = 'text_2';

}

В ООП так:

class Main
{
 public $a;
 public $b;
 public function abc()
 {
   $this->a= 'text_1';
   $this->b = 'text_2';
 }
}
$main = new Main();
$main->abc();
echo $main->a;

14

Re: Область видимості

Vo_Vik написав:

В функціональному програмуванін можна зробити так:

function abc(&$a, &$a)
 $a= 'text_1';
 $b = 'text_2';

}

В ООП так:

class Main
{
 public $a;
 public $b;
 public function abc()
 {
   $this->a= 'text_1';
   $this->b = 'text_2';
 }
}
$main = new Main();
$main->abc();
echo $main->a;

Або навіть так)

class Main
{
  public $a = 'text_1',$b = 'text_b';
}
$main = new Main;
echo $main->a;
echo $main->b;

15

Re: Область видимості

Vo_Vik написав:

В функціональному програмуванін можна зробити так:

function abc(&$a, &$a)
 $a= 'text_1';
 $b = 'text_2';

}

У вас дуже дивне уявлення про функціональне програмування.

16 Востаннє редагувалося TwiStar (19.01.2015 15:42:51)

Re: Область видимості

Дуже багато людей плутають функціональне та процедурне програмування.

Мені здавалося, що вже декілька років як не потрібно пояснювати, чому глобальні змінні - зло. Але ще досі їх показують.

У прикладі від VTrim, якщо функція abc декларується в одному місці, визивається в другому, а змінні використовуються у третьому - той, хто це не писав ніколи не зрозуміє, що взагалі відбувається у коді. Звідки взялися ці змінні? Чому вони мають те значення, яке мають? А що, як воно хибне - де шукати помилку? Навіть для того хто це писав такий код - не просто засіб вистрілити собі у ногу, а справжнє мінне поле.

Єдине, що я можу собі уявити - це повернення декількох змінних із функції, тоді можна робити так:

function foo() { return ['foo', 'bar', 'baz']; }

list($foo, $bar, $baz) = foo();

echo $foo, $bar, $baz;

Але все одно пов'язувати зовнішній код із функціями, тобто їх внутрішньою структурою - це створювати собі зайві проблеми. Уявіть, що з часом ви повинні будете змінити/замінити цю функцію. Якщо ваш код буде залежати від внутрішньої структури - вам доведеться переписати всі місця, в яких ви користуєтесь цією функцією. Такий підхід - це справжній кошмар у підтримці. Не робіть так, краще подумайте, як можна вирішити задачу іншим шляхом - він завжди є. І повірте, той, хто буде працювати з цим кодом після Вас буде Вам вдячний.

Подякували: quez1

17

Re: Область видимості

Тоді можна ще так.

function foo() { return ['foo'=>'foo1', 'bar'=>'bar2', 'baz'=>'baz3']; }
 
extract(foo());
 
echo $foo, $bar, $baz;

18

Re: Область видимості

VTrim написав:

Тоді можна ще так.

function foo() { return ['foo'=>'foo1', 'bar'=>'bar2', 'baz'=>'baz3']; }
 
extract(foo());
 
echo $foo, $bar, $baz;

Але скрипт з ООП працює повільніше, ніж звичайне?

19

Re: Область видимості

Я думаю щоб адекватно який стиль програмування вибрати для конкретного проекту чи обєкто орієнтований чи процедурний необхідно мати хочаб невеликий досвід написання коду в обох цих стилях, а якщо взяти до уваги що ооп стиль зараз досить популярний то ігнорувати його вивчення не є хорошою ідеєю. І на рахунок повільніший. А ви перевірти наскільки він повільніший, можливо для вас ця різниця виявиться не суттєвою.

20

Re: Область видимості

Між іншим, теперішня документація PHP працює майже повністю на коді, написаному в процедурному стилі.

Процедурний стиль в PHP - це база, на якій будується програмування більш високого рівня, тобто ООП.

Оскільки між процедурним програмуванням і об'єктно-орієнтованим програмуванням "всього один щабель" по рівню програмування, то знати процедурне програмування потрібно обов'язково.

Але і особливо затримуватись на процедурному програмуванні теж не варто, бо ООП таки, в кінцевому результаті, спрощує програмісту роботу.