Рефакторинг глобальных переменных #143

Closed
rivetweb opened this Issue Dec 8, 2016 · 2 comments

Comments

Projects
None yet
1 participant
@rivetweb

rivetweb commented Dec 8, 2016

  • явное указание глобальных переменных
$forum_user -> $GLOBALS['forum_user']
$forum_hooks -> $GLOBALS['forum_hooks']
и т.д.
  • в коде будет более понятно какие глобальные переменные используются
@rivetweb

This comment has been minimized.

Show comment
Hide comment
@rivetweb

rivetweb Dec 8, 2016

  • второй вариант - вынести в класс как статические публичные переменные
final class punbb {

	static $forum_db;

	// ... other variables

}

использование punbb::$forum_db

  • в коде будет более понятно какие глобальные переменные используются
  • как бонус - те кто используют IDE - получат автодополнение

rivetweb commented Dec 8, 2016

  • второй вариант - вынести в класс как статические публичные переменные
final class punbb {

	static $forum_db;

	// ... other variables

}

использование punbb::$forum_db

  • в коде будет более понятно какие глобальные переменные используются
  • как бонус - те кто используют IDE - получат автодополнение
@rivetweb

This comment has been minimized.

Show comment
Hide comment
@rivetweb

rivetweb Dec 8, 2016

тесты

  • второй вариант по скорости оказался близок к текущему коду (с global $forum_db;) и в него проще отрефакторить
  • $GLOBALS замедляет на порядок

class_static.php

<?php

final class punbb {

	static $forum_db;

	// ... other variables

}

$t = microtime(true);
for ($i = 0; $i < 10000; $i++) {
	punbb::$forum_db = 1;
	$code = punbb::$forum_db + 1;
}
echo "Time: " . (microtime(true) - $t) . "\n";

current.php

<?php

global $forum_db;

$forum_db = 1;

$t = microtime(true);
for ($i = 0; $i < 10000; $i++) {
	$forum_db = 1;
	$code = $forum_db + 1;
}
echo "Time: " . (microtime(true) - $t) . "\n";

globals.php


<?php

$GLOBALS["forum_db"] = 1;

$t = microtime(true);
for ($i = 0; $i < 10000; $i++) {
	$GLOBALS["forum_db"] = 1;
	$code = $GLOBALS["forum_db"] + 1;
}
echo "Time: " . (microtime(true) - $t) . "\n";

rivetweb commented Dec 8, 2016

тесты

  • второй вариант по скорости оказался близок к текущему коду (с global $forum_db;) и в него проще отрефакторить
  • $GLOBALS замедляет на порядок

class_static.php

<?php

final class punbb {

	static $forum_db;

	// ... other variables

}

$t = microtime(true);
for ($i = 0; $i < 10000; $i++) {
	punbb::$forum_db = 1;
	$code = punbb::$forum_db + 1;
}
echo "Time: " . (microtime(true) - $t) . "\n";

current.php

<?php

global $forum_db;

$forum_db = 1;

$t = microtime(true);
for ($i = 0; $i < 10000; $i++) {
	$forum_db = 1;
	$code = $forum_db + 1;
}
echo "Time: " . (microtime(true) - $t) . "\n";

globals.php


<?php

$GLOBALS["forum_db"] = 1;

$t = microtime(true);
for ($i = 0; $i < 10000; $i++) {
	$GLOBALS["forum_db"] = 1;
	$code = $GLOBALS["forum_db"] + 1;
}
echo "Time: " . (microtime(true) - $t) . "\n";

@rivetweb rivetweb closed this Jun 13, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment