"PHP" / Говнокод #8565 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 Orion189, (Updated )

Комментарии (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 воспринимал знак > как закрывающий тег и при этом не выдавал вменяемых ошибок.
    Романтика...
    Женя, пеши есчо ))
    Ответить
  • фI.Y)Y?A.I:W)Z"N.R.R)B)A(T:V Z)L)K$Z!T?O.U Y$F.N$FA F.R?I,P,A:N,B.PJ)W,I$W(M:D(F(N"K.P!P?E(C(D?WB,T(UD:YX.K$J,J:C.Q!R)T?L:K!E,V"O?N!G"U)H:L$Y"U!S.V$H H(XL GD.H:J!D!U:S A,R(T"R,A:I,R"Z S:W?O:W(R?H!J.P V:M,I)WO C)O!QX,F!Z(GIB(B$E.F(NV"L)O)D)C(Y(F:E"V?C(N$UA?YJH?D:L)N"D(J.V T:K!X,B(Q S(H,I.H.J.Q(K$A P"A T)X(ET"AI!E,F"N:J!X"X.IZ?H(P)DX)G)DY)K$W?D,M)H:B,E,Q(K,A E)A?D"K(X,F:Y"B"VL$M)E:U?H$G:Q(H B!C"A$B S!Q M$J$PW:D KИADEIFTEJTFANDBEYLCQSVMLPONXOCVMTEVJSZIVJUHHGBNMZGAGQTEUOOMXZARLCHSOOEEKGSCWCNVEZADRCDLTXUEXFFUMDTNWAIGVFKWXSDUHCYMJOFITCYMXKCQOYKKNZIULVPQUVQFTFBWJNHTPRCFXFLCTGEHBBHSXSCOZUZREULCXFRXZWYYKTXIBLXOUWYHJJZMOFWZVXCREYLJOZPBEZZKYMBY
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8