国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

? ??? ?? PHP ???? PHP ?? PHP ??? ??

PHP ?? PHP ??? ??

Jul 25, 2016 am 09:13 AM

1. ?? ??? ??? ??? ?????

??? ?? ??? ??? ??? ??? ?? ??? ???? ??? ?????? ?? ?? ????. ??? ??? ??? ???? ?? ??? ? ???? ?? ? ????. ?? ??? ??? ?? ?? ??? ?? ????? ??? ??, ?? ??? ??? ?? ?? ??? ??? ? ????. ??? ???? ?? ??? ?? ??????. ?? ?? ??????? (??? ??) ??? ?????.

2. ??? ??

  1. // Database ???? ?? DB ??? ?????.

  2. class Database{
  3. // ?? ?? ?? ???? ??
  4. private static $_instance = null;
  5. // ???? ???? ?? ???? ???? ????.
  6. private function __construct()
  7. {
  8. echo 'constructor';
  9. }

  10. // ??? ????? ???? ???

  11. public static function getInstance()
  12. {
  13. if (!(self::$_instance instanceof ??????)) {
  14. self::$_instance = new Database();
  15. }
  16. return self::$_instance;
  17. }
  18. }

  19. $database = Database::getInstance();

  20. var_dump($database);

?? ??

??: ??? ??? ???? ? ?? ????? ??? ? ????. ??? ???? ?? ?? ??? ? ????? ???? ??? ??? ? ??? ? ?? ??? ????? ???? ??? ??? ???? ????(????? ??? ?? ??).

?? ??? ??? ? ????? ????.

  1. ?? ??? {
  2. private static $_instance = null;
  3. public static function getInstance() {
  4. $class = __CLASS__;
  5. if(!(self::$_instance ????of $class)) {
  6. self::$_instance = new $class;
  7. }
  8. return self:: $_instance;
  9. }
  10. }
  11. ??? DB {
  12. }
  13. ??? DBWriteConnection ?? DB {
  14. ??? ??;
  15. ???? ?? __construct () {
  16. echo 'DBWriteConnection
    ';
  17. }
  18. }
  19. class DBReadConnection ?? DB {
  20. ??? ??;
  21. ?? ?? __construct () {
  22. echo 'DBReadConnection
    ';
  23. }
  24. }
  25. $dbWriteConnection = DBWriteConnection::getInstance();
  26. var_dump($dbWriteConnection);
?? ??

3. ????? ?? ????? ??? ??? ??? ? ??? ??? ????? ???? ??? ? ?? ????? ??? ? ??? ?? ??? ?? ?? ??????(?? ?? ????? ?? ? ?? ??????).

?? ???:

  1. class Registry {

  2. /**
  3. * @var array ?? ??? ???? ???
  4. */
  5. static private $_store = array() ;
  6. /**
  7. * ?????? ?? ??
  8. *
  9. * ??? ???? ??? ??? ??? ?????.
  10. *
  11. * @param mix $object ??? ??
  12. * @param string $name ??? ???? ? ???? ??
  13. * @return void
  14. * @throws Exception
  15. */
  16. static public function add($object, $name = null)
  17. {
  18. // ??? ???? ?? ?? ??? ??? ???? ???? ????????.
  19. $name = (!is_null($name)) ?$name:get_class($object);
  20. if (isset(self::$_store[$name])) {
  21. throw new Exception( "??? ?? ?????? ?????.");
  22. }
  23. self::$_store[$name]= $object;
  24. }
  25. /**
  26. * ??????? ?? ????
  27. *
  28. * @param string $name ?? ??, {@see self::set()}
  29. * @return Mixed
  30. * @throws ??
  31. */
  32. ?? ?? ?? get($name)
  33. {
  34. if (!self::contains($name)) {
  35. throw new Exception("??? ?????? ???? ????.");
  36. }

  37. return self::$_store[$name];

  38. }
  39. /**
  40. * ?????? ??? ??? ??
  41. *
  42. * @param string $name ?? ??, {@see self::set()}
  43. * @return bool
  44. */
  45. ?? ?? ???? ??? ?????. ($name)
  46. {
  47. if (!isset(self::$_store[$name])) {
  48. return false;
  49. }
  50. return true;
  51. }
  52. /**
  53. * ??????? ?? ??
  54. *
  55. * @param string $name ?? ??, {@see self::set()}
  56. * @returns void
  57. */
  58. ?? ?? ?? ??($name)
  59. {
  60. if (self::contains($name)) {
  61. unset( self::$_store[$name]);
  62. }
  63. }
  64. }
?? ??

??? ????? Registry ???? ?????.

  1. require 'Registry.php';

  2. class DBReadConnection {}

  3. class DBWriteConnection {}

  4. $read = new DBReadConnection;

  5. Registry::add($read);

  6. $write = new DBWriteConnection;

  7. Registry::add($write);

  8. // ?? ????? ????? ?????:

  9. $read = Registry::get( 'DBReadConnection');
  10. $write = ?????::get('DBWriteConnection');

  11. var_dump($read);

  12. var_dump($write);
?? ??

??? ??? ????? ??? ???? ????, ???? ?????? ?? ???? ????.

?? ??:

  1. require 'Registry.php';

  2. ?? ??? DBConnection {

  3. static public function getInstance($name = null)
  4. {
  5. // __CLASS__? ?? ?? ??? ??? ?????.
  6. $class = get_called_class();
  7. // ?? ?? ?? ?? ????? ????
  8. // ??? ???? ??? ????? ?????.
  9. $name = (!is_null($name)) ? $name:$class;
  10. if (!Registry ::contains($name)) {
  11. $instance = new $class();
  12. Registry::add($instance, $name);
  13. }
  14. return Registry::get($ name);
  15. }
  16. }

  17. class DBWriteConnection? DBConnection? ?????. {

  18. public function __construct()
  19. {
  20. echo 'DBWriteConnection
  21. }
  22. }

  23. class DBReadConnection? DBConnection? ?????. {

  24. ?? ?? __construct()
  25. {
  26. echo 'DBReadConnection
  27. }
  28. }

  29. $dbWriteConnection = DBWriteConnection::getInstance('abc');

  30. var_dump($dbWriteConnection);
  31. $dbReadConnection = DBReadConnection::getInstance();
  32. var_dump($dbReadConnection);

?? ??

4.?? ?? ?? ??? ??? ? ?? ? ???? ??? ????? ??? ?????. ????? ??? ?? ???? ?????? ???? ??? ????? ?? ??? ??? ?????.

????? ?? ??? ?? ???? ??? ??? ??? ???? ?? ?? ??? ????? ? ?? ?????. ?? ?? ??? ??, ?? ?? ?? ???? ??? ????. ??? ??? ?? ? ??? ?? ?? ??? ??? ??? ??? ??? ???? ? ??? ????.

  1. /**
  2. * ?? ???
  3. *
  4. * ??, mysql ?? sqlite ?? ?? ? ??
  5. */
  6. class Log_Factory {
  7. /**
  8. * ?? ?? ????
  9. *
  10. * @param string $type ?? ??? ??, ??, mysql ?? sqlite
  11. * @param array $options ?? ??? ??
  12. */
  13. ?? ?? getLog( $type = 'file', array $options)
  14. {
  15. // ??? ???? ???
  16. $type = strtolower($type);
  17. // ??? ?? ??
  18. $class = "Log_" .ucfirst($type);
  19. require_once str_replace('_', DIRECTORY_SEPARATOR, $class) '.php';
  20. // ????????. ???? ???? ??? ??? ??
  21. $log = new $class($options);
  22. ???($type) {
  23. ??? 'file':
  24. $log->setPath($options[ 'location']);
  25. break;
  26. case 'mysql':
  27. $log->setUser($options['username']);
  28. $log->setPassword($options ['password']);
  29. $log->setDBName($options['location']);
  30. break;
  31. case 'sqlite':
  32. $log->setDBPath($ options['location']);
  33. break;
  34. }
  35. return $log;
  36. }
  37. }
?? ??

5. ?? ?? ?? ??? ???? ?? ???? ??? ?? ??? ??? ??? ???? foreach? ??? ??? ? ????. ?? foreach ??? ????? ??? ???? ??? ??? ? ????.

(1) Iterator ????? ??

  1. class BasicIterator? Iterator? ?????. {

  2. private $key = 0;
  3. private $data = array(
  4. "hello",
  5. "world",
  6. );

  7. ?? ?? __construct() {

  8. $this->key = 0;
  9. }

  10. ?? ?? rewind() {

  11. $this->key = 0;
  12. }

  13. () {

  14. return $this->data[$this->key];
  15. }

  16. ?? ?? ?() {

  17. return $this ->key;
  18. }

  19. ?? ?? next() {

  20. $this->key ;
  21. return true;
  22. }
  23. public function valid() {

  24. return isset($this->data[$this->key]);
  25. }
  26. }

  27. $iterator = new BasicIterator();

  28. $iterator->rewind();

  29. do {

  30. $key = $iterator- >key();
  31. $value = $iterator->current();
  32. echo $key .': ' .$value . PHP_EOL;
  33. } while ($iterator->next( ) && $iterator->valid());

  34. $iterator = new BasicIterator();
  35. foreach ($iterator as $key => $value ) {
  36. echo $key .': ' .$value . PHP_EOL;
  37. }

?? ??

(2) RecursiveIteratorIterator? ???? ??? ?????.

  1. $array = array(

  2. "Hello", // ?? 1
  3. array(
  4. " World" // ?? 2
  5. ),
  6. array(
  7. "How", // ?? 2
  8. array(
  9. "are", // ?? 3
  10. "you" / / ?? 3
  11. )
  12. ),
  13. "doing?" // ?? 1
  14. );

  15. $recursiveIterator = new RecursiveArrayIterator($array);

  16. $recursiveIteratorIterator = new RecursiveIteratorIterator($recursiveIterator);

  17. foreach($recursiveIteratorIterator as $key => $value) {

  18. echo "??: " . $recursiveIteratorIterator->getDepth() . PHP_EOL;
  19. echo "?: " . $key . PHP_EOL;
  20. echo "?: " .$value .

?? ??

(3)??FilterIterator迭代器實(shí)現(xiàn)過(guò)濾

  1. class EvenFilterIterator ?? FilterIterator {

  2. /**
  3. * ?? ?? ??
  4. *
  5. * @return bool
  6. */
  7. public function accept()
  8. {
  9. // ?? ???? ?????
  10. $iterator = $this->getInnerIterator();
  11. // ?? ?? ?????
  12. $ key = $iterator->key();
  13. // ?? ? ??
  14. if ($key % 2 == 0) {
  15. return true;
  16. }
  17. false ??;
  18. }
  19. }

  20. $array = array(

  21. 0 => "?????",
  22. 1 => " Everybody Is",
  23. 2 => "??",
  24. 3 => "Amazing",
  25. 4 => "The",
  26. 5 => "Who",
  27. 6 => "Doctor",
  28. 7 => "Lives"
  29. );

  30. // ???? ??? ???

  31. $ iterator = new ArrayIterator($array);

  32. // FilterIterator ???

  33. $filterIterator = new EvenFilterIterator($iterator);

  34. foreach ($filterIterator as $key => $value) {
  35. echo $key .': '. $ ? . PHP_EOL;
  36. }
  37. ?>

復(fù)代碼

(4)RegexIterator迭代器

  1. // RecursiveDirectoryIterator ???
  2. $directoryIterator = new RecursiveDirectoryIterator("./" );

  3. // ????? ???? ?? RecursiveIteratorIterator ??

  4. $recursiveIterator = new RecursiveIteratorIterator($directoryIterator);

  5. // Createa *Iterator*.php ??? ?? ??

  6. $regexFilter = new RegexIterator($recursiveIterator, '/(.*?)Iterator(.*?).php$/');

  7. < p>// ??
  8. foreach ($regexFilter as $key => $file) {
  9. /* @var SplFileInfo $file */
  10. echo $file->getFilename() . PHP_EOL;
  11. }
復(fù)主代碼

功能:找到所有的php文件

(4)LimitItertor迭代器,imageSQL中的LIMIT

  1. // ?? ??

  2. $array = array(
  3. 'Hello',
  4. 'World ',
  5. '???',
  6. '??',
  7. '?',
  8. '??? ???'
  9. );

  10. // ??? ???

  11. $iterator = new ArrayIterator($array);

  12. // ?? 2?? ??? ???? ?? ?? ???? ????

  13. $limitIterator = new LimitIterator($ iterator, 0, 2);

  14. // ??

  15. foreach ($limitIterator as $key => $value) {
  16. echo $key .': '. $ ? . PHP_EOL;
  17. }

復(fù)代碼

6. ??? ??(???)

??? ??? ??? ??????? ?? ???? ??? ? ?? ????? ??? ????? ????.

  1. /**

  2. * ??? ???
  3. *
  4. * ? ???? ???? ??? ???? ??
  5. * ??(FIFO)?? ??? ??? ? ????.
  6. */
  7. ?? ??? {
  8. / **
  9. * @var array ???? ??? ?? => ??
  10. */
  11. static protected $callbacks = array();
  12. /**
  13. * ?? ??
  14. *
  15. * @param string $eventName ??? ??? ??
  16. * @param mix $callback Event_Callback ?? Closure? ????
  17. */
  18. ?? ?? ?? RegisterCallback($eventName, $callback)
  19. {
  20. if (!($callback instanceof Event_Callback) && !($callback instanceof Closure)) {
  21. throw new Exception("??? ??!");
  22. }
  23. $eventName = strtolower($eventName);
  24. self::$callbacks[$eventName][] = $callback;
  25. }
  26. /**
  27. * ??? ???
  28. *
  29. * @param string $eventName ???? ??? ??
  30. * @param mix $data ???? ?? ???
  31. */
  32. static public ?? ???($eventName, $data)
  33. {
  34. $eventName = strtolower($eventName);
  35. if (isset(self::$callbacks[$eventName])) {
  36. foreach (self::$callbacks[$eventName] as $callback) {
  37. self::callback($callback, $data);
  38. }
  39. }
  40. }
  41. / **
  42. * ?? ??
  43. *
  44. * @param mix $callback Event_Callback ?? Closure? ????
  45. * @param mix $data ???? ??? ???
  46. */
  47. ?? ?? ?? ??($callback, $data)
  48. {
  49. if ($callback instanceof Closure) {
  50. $callback($data);
  51. } else {
  52. $callback->run($data);
  53. }
  54. }
  55. }

  56. /**

  57. * ??? ?? ?????
  58. *
  59. * ???? ???? ???? ??
  60. * ?? this? ???? ???? ??? ? ????
  61. *. run ????
  62. * ???? ???? ? ?????.
  63. */
  64. interface Event_Callback {
  65. ?? ?? run($data);
  66. }

  67. /**

  68. * ?? ??
  69. */
  70. class LogCallback? Event_Callback? ?????. {
  71. ?? ?? run($data)
  72. {
  73. echo "?? ???" .
  74. var_dump($data);
  75. }
  76. }

  77. Event::registerCallback('save', new LogCallback());

  78. // ?? ??? ??? ???? ??

  79. ???::registerCallback('save', function ($data) {
  80. echo "?? ???" . PHP_EOL;
  81. var_dump($data);
  82. });

  83. < ;p>class MyDataRecord {
  84. public function save()
  85. {
  86. // ??? ??
  87. // ?? ??? ???
  88. Event::trigger('save', array ("Hello", "World"));
  89. }
  90. }

  91. // ? ??? ??? ?????

  92. $data = new MyDataRecord();
  93. $data->save(); // '??' ???? ??? ?????

?? ??

7. ??? ?? ?? ??? ?? ??? ???? ???? ? ??? ???? ? ???? ???? ??? ? ????.

  1. /**

  2. * ?? ???
  3. */
  4. ??? ?? {
  5. /**
  6. * @var Log_Engine_Interface
  7. */
  8. protected $engine = false;
  9. /**
  10. * ??? ??? ??
  11. *
  12. * @param string $message
  13. */
  14. ?? ?? add($message)
  15. {
  16. if (!$this->engine) {
  17. throw new Exception('??? ? ? ????. ??? ???? ?????.');
  18. }
  19. $data['datetime'] = time();
  20. $data[' message'] = $message;
  21. $session = Registry::get('session');
  22. $data['user'] = $session->getUserId();
  23. $this->engine->add($data);
  24. }
  25. /**
  26. * ?? ??? ?? ?? ??
  27. *
  28. * @param Log_Engine_Interface $Engine
  29. */
  30. ?? ?? setEngine(Log_Engine_Interface $engine)
  31. {
  32. $this->engine = $engine;
  33. }
  34. /**
  35. * ??? ???? ?? ??
  36. *
  37. * @return Log_Engine_Interface
  38. */
  39. ?? ?? getEngine()
  40. {
  41. return $this- >engine;
  42. }
  43. }

  44. interface Log_Engine_Interface {

  45. /**
  46. * ??? ??? ??
  47. *
  48. * @param string $message
  49. */
  50. ?? ?? add(array $data);
  51. }

  52. class Log_Engine_File? Log_Engine_Interface? ?????. {

  53. /**
  54. * ??? ??? ??
  55. *
  56. * @param string $message
  57. */
  58. ?? ?? add(array $data)
  59. {
  60. $line = '[' .data('r', $data['datetime']). '] ' .$data['message'] ' ???: ' .$data['user'] . ??>
  61. $config = Registry::get('site-config');
  62. if (!file_put_contents($config['location'], $line, FILE_APPEND)) {
  63. throw new Exception("??? ?? ?? ??? ??????.");
  64. }
  65. }
  66. }

  67. $engine = new Log_Engine_File();

  68. $log = new Log();

  69. $log->setEngine($engine);

  70. // ?????? ??

  71. Registry::add($log);

?? ??
??? ???? ??? ??? ???? ????. ?? ?? ???? ???. ?? ?? ???? ??? ?? ??? ?????. ?? ?? ???? ???? ?? ???? ??? ???? ??? ???? ?????? ???? ??? ? ??? ?????.

8. ??-?-???? MVC ?????? ??? Model-View-Controller? ??????? ?? ?? ? ?? ?? ?? ??? ???? ?????. ??-??? ?? ?? ?? ???? ???? ????. ??????, ? ??? ?? ??? ? ????. ? ?? ??? ???? ???? ?? ????? ???? ??? ?????. ????-?????? ??? ???? ???? ??? ?? ?? ??? ???? ??? ???? ??? ?, ?? ???? ?? ??? ????? ?????.

???? MVC ???? ?????:

php mvc架構(gòu)圖 9. ??? ??

??? ?? ???? ??? ?? ??? ??????.

??? ??? ?? ?? ??:

    php ??? ??: ??? ??, ??? ??, ??? ????
  • PHP ??? ?? ??? ?? ?? ??
  • php ??? ?? ?? ?? ??
  • PHP ??? ?? ?? ??? ??(2)
  • PHP ??? ?? ??? ??? ??
  • PHP ??? ??? ??? ?? ??
  • PHP ??? ?? ?? ??? ??
  • PHP ??? ?? ?? ??? ??
  • PHP ??? ?? ??? ?? ?? ??
  • PHP ??? ??? ??? ?? ?? ??
  • ??? ??? ??? ?? ??, PHP ?? ??? ??
  • PHP ??? ?? ? ??? ?? ???
  • PHP?? ????? ???? ? ?? ??? ??? ?? ?? ??
  • PHP ??? ??? ??? ?? ??

? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

?? ????
1742
16
Cakephp ????
1596
56
??? ????
1536
28
PHP ????
1396
31
???
PHP ?? API ????? ?? ??? ?????? PHP ?? API ????? ?? ??? ?????? Jun 14, 2025 am 12:27 AM

ToversionAphp ??, forclarityandeasofrouting, ac

PHP?? ?? ? ??? ????? ????????? PHP?? ?? ? ??? ????? ????????? Jun 20, 2025 am 01:03 AM

TOSECURELYHANDLEAUSTENCENDACTIONANDACTERIZINGINPHP, FORCUCTSESTEPS : 1. ALWAYSHASHPASSWORTHPASSWORD_HASH () ? VERVERIFYUSINGPANSWORD_VERIFY (), usePREPAREDSTATEMENTSTOPREVENTSQLINGERGED, andSTOREUSERSESSEATAIN $ _SESSIONSAFTERLOGIN.2.impleplempletrole ?? ACCESSC

PHP? ?? ? ?? ?? ????? ????? ???? ?????? PHP? ?? ? ?? ?? ????? ????? ???? ?????? Jun 14, 2025 am 12:25 AM

ProceduralAndObject-OrientedProgramming (OOP) InphpDiffersiMINTIFINTIONTERINGLISTURE, ??? ? ? DATAHANDLING

PHP? ?? ?? (??)? ???? ?? ?? ? ? ????? PHP? ?? ?? (??)? ???? ?? ?? ? ? ????? Jun 14, 2025 am 12:25 AM

phpdoesnothaveAbuilt-inweakMapButofferSweakReference.1.WeakReenceAllowsholdingReferences withoutpreventinggarbageCollection.2.ItusteForCaching, Eventlisteners, andMetAdataWithoutAftingObjectLifeCycles.3.youcoucococococococcinccing

PHP?? ?? ???? ??? ??? ?? ? ? ??????? PHP?? ?? ???? ??? ??? ?? ? ? ??????? Jun 19, 2025 am 01:05 AM

PHP?? ?? ???? ???? ????? ??? ?? ??? ???? ?? ??? ??? ??? ???? ????. 1. finfo_file ()? ???? ?? ?? ??? ???? ???/jpeg? ?? ?? ?? ? ?????. 2. uniqid ()? ???? ??? ?? ??? ???? ? Web ?? ????? ??????. 3. php.ini ? html ??? ?? ?? ??? ???? ???? ??? 0755? ?????. 4. Clamav? ???? ???? ???? ??? ??????. ??? ??? ?? ???? ????? ???? ?? ??? ????? ???? ??? ? ??? ?????.

PHP?? == (??? ??)? === (??? ??)? ???? ?????? PHP?? == (??? ??)? === (??? ??)? ???? ?????? Jun 19, 2025 am 01:07 AM

PHP?? ==? ==? ?? ???? ?? ??? ??????. == ?? ??? ?? ?? ?????. ?? ??, 5 == "5"? true? ????, ?? ??? ???? ?? ?? ??? ????? ????? (? : 5 === "5"? false? ?????. ?? ?????? ===? ? ???? ?? ?????? == ?? ??? ??? ???? ?????.

PHP? NOSQL ?????? (? : MongoDB, Redis)? ??? ?? ??? ? ????? PHP? NOSQL ?????? (? : MongoDB, Redis)? ??? ?? ??? ? ????? Jun 19, 2025 am 01:07 AM

?, PHP? ?? ?? ?? ?????? ?? MongoDB ? Redis? ?? NOSQL ??????? ?? ??? ? ????. ?? MongoDBPHP ???? (PECL ?? Composer? ?? ??)? ???? ????? ????? ??? ?????? ? ???? ????? ??, ??, ?? ? ?? ??? ?????. ??, Predis ????? ?? Phpredis ??? ???? Redis? ???? ?? ? ?? ? ??? ???? ??? ????? Phpredis? ???? ?? Predis? ?? ??? ?????. ? ? ?? ??? ???? ? ????? ????.

php (, -, *, /, %)?? ?? ??? ??? ?????? php (, -, *, /, %)?? ?? ??? ??? ?????? Jun 19, 2025 pm 05:13 PM

PHP?? ?? ??? ??? ???? ??? ??? ????. 1. ?? ??? ?? ? ?? ??? ??? ???? ???? ??? ? ????. ??? ??? ???? ????? ????? ???? ????. 2. ?? ?? ?? - ??, ??? ???? ?? ??? ?????. 3. ?? ???? ??? ??? ???? ??? ??? ?????. 4. Division? / ??? ???? 0?? ??? ?? ????? ??? ?? ??? ?? ? ? ????. 5. ???? ??? ???? ?? ?? ? ?? ??? ???? ? ??? ? ???, ??? ?? ? ? ??? ??? ???? ?????. ? ???? ???? ???? ??? ??? ??? ???? ?? ??? ? ??????? ????.

See all articles