1. PHP / Говнокод #8565

    +160

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    function &GetObject($cls, $p=null, $flags=0)
    {	//HIDE($objects,$i,$ext,$n,$v)
    	static $objects;
    	if (is_array($cls)) {
    		$i = null;
    		foreach($cls as $n=>$v) $i->$n = $v;
    		$result = &$i;
    		return $result;
    	}
    	if (!($flags&O_NEW) && isset($objects[$cls])) return $objects[$cls];
    
    	$ext = new WExtern($cls, 'c');
    	if (!($flags&O_NEW) && isset($objects[$i=$ext->Id()])) return $objects[$i];
        if ($flags&O_INSTANCE) {$x = null; $result = &$x; return $result;}
    
    	if (!$ext->Exists()) $ext->Prepare();
    	if (($flags&O_NOERROR) && !class_exists($ext->c)) {
    		$co = $ext->c;
    		$cc = $co{0}.'B'.substr($co,1);
    		if (($flags&O_NOERROR) && !class_exists($cc)) {
    			$i = false;
    			return $i;
    		} else {
    			$ext->c = $cc;
    		}
    	}
    	
    	if (!class_exists($ext->c)) {
    		$co = $ext->c;
    		$cc = $co{0}.'B'.substr($co,1);
    		if (!class_exists($cc)) {
    			$i = false;
    			return $i;
    		} else {
    			$ext->c = $cc;
    		}
    	}
    	$c = $ext->c;
    	$i = new $c;
    
    	if (isset($ext->I) && $ext->I) $i->_I = reset($ext->I);	// Instance ID
    	if (isset($ext->A) && $ext->A) $i->_A = $ext->A;		// Alias ID
    
    	if (!($flags&O_NEW)) {
    		$objects[$ext->Id()] = &$i;
    		if ($ext->Id()!=$cls) $objects[$cls] = &$i;
    	}
    	$options = &WConfig::Get('OPTIONS');
    	if (/*is_a($i, 'wobject')*/ $i instanceof wobject && $options) {
    		$o = $options;
    		$c = get_class($i);
    		do{
    			$c = strtolower($c);
    			if (isset($o[$c])) {
        			$i->o = array_merge($o[$c], isset($i->o) ?$i->o :array());
    			}
    		}while($c=get_parent_class($c));
    		if (isset($ext->A) && isset($o[$ext->A])) 	$i->o = array_merge(isset($i->o) ?$i->o :array(), $o[$ext->A]);
    		if ($ext->I && isset($o[$ext->Id()])) 		$i->o = array_merge(isset($i->o) ?$i->o :array(), $o[$o[$ext->Id()]]);
    	}
    
    	if (is_object($p)) {
    		if (isset($p->o)) $i->o = array_merge(isset($i->o) ?$i->o :array(), $p->o);
    		$p = isset($p->c) ? $p->c : null;
    	}
    	if (method_exists($i,'Create')  && $p!==false) {
    		call_user_func_array(array(&$i,'Create'), is_array($p) ?$p : (isset($p) ? array($p) : array()));
    	}
    
    	return $i;
    }

    Одна из базовых функций фремворка.

    Запостил: Orion189, 18 Ноября 2011

    Комментарии (14) RSS

    • Я тут в споткнулся.
      if (is_array($cls)) {
      $i = null;
      foreach($cls as $n=>$v) $i->$n = $v;
      $result = &$i;
      return $result;
      }
      в $result хранится ссылка на последний элемент массива $cls ??

      А что за фремворк, что нибудь самописное ??
      Ответить
    • Я временно приостановил разбор этого говнища))
      Ответить
      • Лучше навсегда останови разработку .
        Ответить
        • Оторвать бы яйца разработчику этого фремворка...
          Ответить
    • Говёный фреймвок - настоящая школа жизни. Из джуниоров он делает либо матёрых сеньоров, либо тупых быдлокодеров.
      Ответить
    • ну не скажите, функция кошерная.

      тут даже некоторое, чего я даже не знал
      $i = null;
      $i->$n = $v;

      null считается пустым объектом? 0_о


      про флаги это вообще супер, давно не видел таких сложных реализаций
      Ответить
      • Это же пехепе)
        null===$dasd

        , любой заранее не определённой переменной.
        Но не,
        null===new stdClass()
        и не
        null==new stdClass()
        Ответить
    • Йохохо, обожаю вапочку ))
      Вот такое $x = null; $result = &$x; return $result; как-то даже не замечал.
      А еще шаблонизатор там мега-зачетный, сколько же радости было, когда он внутри условия If воспринимал знак > как закрывающий тег и при этом не выдавал вменяемых ошибок.
      Романтика...
      Женя, пеши есчо ))
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий