: Бележки за overloading в PHP 5

Alek Andreev <[email protected]> Wed, 07 Apr 2004 09:30:03 +0000
Newsgroups gmane.comp.php.bulgarian
Message-ID <[email protected]>
=C7=E4=F0=E0=E2=E5=E9=F2=E5!

=CA=EE=E9=F2=EE =EE=F2 =E2=E0=F1 =EF=EE=EB=E7=E2=E0 overloading (__get(),=
__set(),__call() =E8 =F2.=ED.) =E5=20
=E4=EE=E1=F0=E5 =E4=E0 =E7=ED=E0=E5 =ED=FF=EA=EE=E8 =ED=E5=F9=E0 =EF=F0=E5=
=E4=E8 =E4=E0 =EC=E8=ED=E5 =EA=FA=EC PHP 5. Overloading-=FA=F2 =E2 PHP 5=20
  =E8=EC=E0 =E4=EE=F1=F2=E0 =F0=E0=E7=EB=E8=F7=E8=FF =EE=F2 =F2=EE=E7=E8 =
=E2 =E2=E5=F0=F1=E8=FF 4. =D2=E5 =ED=E5 =F1=E0 =E4=EE=EA=F3=EC=E5=ED=F2=E8=
=F0=E0=ED=E8, =ED=EE =F2=EE=EA=F3=20
=F9=EE =F0=E0=E7=E1=F0=E0=F5 =EA=E0=EA=E2=E8 =F1=E0, =E4=EE=EA=E0=F2=EE =F1=
=E5 =EE=EF=E8=F2=E2=E0=F5 =E4=E0 =EF=EE=E4=EA=E0=F0=E0=EC =E5=E4=E8=ED =F1=
=E0=E9=F2 =F1=EB=E5=E4 =FA=EF=E3=F0=E5=E9=E4.

1) overload() =E2=E5=F7=E5 =ED=E5 =F1=FA=F9=E5=F1=F2=E2=F3=E2=E0 =EA=E0=F2=
=EE =F4=F3=ED=EA=F6=E8=FF.
=C2 PHP5 =E2=F1=E5=EA=E8 =EA=EB=E0=F1 =F1=FA=F1 =E4=E5=F4=E8=ED=E8=F0=E0=ED=
=E8 __get, __set, =E8=EB=E8 __call =EC=E5=F2=EE=E4=E8 =F1=E5=20
=F1=F7=E8=F2=E0 =E7=E0 overloaded =EF=EE =EF=EE=E4=F0=E0=E7=E1=E8=F0=E0=ED=
=E5. =C5=F2=EE =EF=F0=E8=EC=E5=F0=E5=ED =EA=EE=E4, =EA=EE=E9=F2=EE =E1=E8=
 =F0=E0=E1=EE=F2=E8=EB=20
=E8 =E2 PHP4 =E8 =E2 PHP5.
	if (function_exists("overload")) {
		overload("myOverloadedClass");
	}

2) =C4=EE=F1=F2=FA=EF=FA=F2 =E4=EE =ED=E5=E4=E5=F4=E8=ED=E8=F0=E0=ED=E8 =EE=
=E1=E5=EA=F2=E8 =EE=F2 __get =E8 __set =E2=E5=F7=E5 =E2=EE=E4=E8 =E4=EE F=
atal=20
Error.
=C2 PHP4 beshe vuzmojno da napravim tova, i da ni se razmine:
	function __set($propName,$propValue) {
		$this->internalVars[$propName] =3D $propValue;
		// internalVars =ED=E5 =E5 =E4=E5=F4=E8=ED=E8=F0=E0=ED=EE =EF=F0=E5=E4=E8=
 =F2=EE=E2=E0
	}
=D1=EB=E5=E4 =EF=FA=F0=E2=EE=F2=EE =E8=E7=EF=FA=EB=ED=E5=ED=E8=E5, PHP =F9=
=E5=F8=E5 =E4=E0 =ED=E8 =ED=E0=EF=F0=E0=E2=E8 =F3=F1=EB=F3=E3=E0 =E8 =E4=E0=
 =E4=E5=F4=E8=ED=E8=F0=E0=20
internalVars =EA=E0=F2=EE =EC=E0=F1=E8=E2. =C2 PHP5, =EE=E1=E0=F7=E5, =EF=
=EE=EB=F3=F7=E0=E2=E0=EC=E5 =F1=EB=E5=E4=ED=E0=F2=E0 =E3=F0=E5=F8=EA=E0:
=09
	Fatal error: Cannot access undefined property for object with=20
overloaded property access in /var/www/testing/overloading.php on line 16

=C8=E7=E1=FF=E3=E2=E0=ED=E5=F2=EE =ED=E0 =F2=E0=E7=E8 =E3=F0=E5=F8=EA=E0,=
 =E5 =EC=ED=EE=E3=EE =EF=F0=EE=F1=F2=EE. =C3=EE=F0=ED=E8=FF=F2 =EF=F0=E8=EC=
=E5=F0 =F9=E5 =F1=F2=E0=ED=E5 =F2=E0=EA=E0:
	function __set($propName,$propValue) {
		// =EF=F0=EE=E2=E5=F0=FF=E2=E0=EC=E5 =E4=E0=EB=E8 =E5 =E4=E5=F4=E8=ED=E8=
=F0=E0=ED=E0 =E2=E5=F7=E5 =EF=F0=EE=EC=E5=ED=EB=E8=E2=E0=F2=E0
		// =E8 =E0=EA=EE =ED=E5 =E5, =F1=E8 =FF =E4=E5=F4=E8=ED=E8=F0=E0=EC=E5
		if (!isset($this->internalVars)) {
			$this->internalVars =3D array();
		}
		$this->internalVars[$propName] =3D $propValue;
		// internalVars =E2=E5=F7=E5 =F9=E5 =E5 =E4=E5=F4=E8=ED=E8=F0=E0=ED=E0
	}

	=09

3) __get() =E5 =F1 =F0=E0=EB=E8=F7=E5=ED =F1=E8=ED=F2=E0=EA=F1=E8=F1.
=C2 PHP4 __get() =EF=F0=E8=E5=EC=E0 2 =EF=E0=F0=E0=EC=E5=F2=FA=F0=E0 - =E8=
=EC=E5 =ED=E0 =EF=F0=EE=EC=E5=ED=EB=E8=E2=E0=F2=E0 =E8 reference =EA=FA=EC=
=20
=ED=E5=E9=ED=E0=F2=E0 =F1=F2=EE=E9=ED=EE=F1=F2.

	__get($propName,&$propValue);

=C2 PHP5 =F2=EE=E2=E0 =E5 =EF=F0=EE=EC=E5=ED=E5=ED=EE. =CF=F0=E8=E5=EC=E0=
 =F1=E5 =F1=E0=EC=EE =E5=E4=E8=ED =EF=E0=F0=E0=EC=E5=F2=FA=F0 (=E8=EC=E5=F2=
=EE =ED=E0=20
=EF=F0=EE=EC=E5=ED=EB=E8=E2=E0=F2=E0), =E0 =ED=E5=E9=ED=E0=F2=E0 =F1=F2=EE=
=E9=ED=EE=F1=F2 =F1=E5 =EE=F7=E0=EA=E2=E0 =E4=E0 =E1=FA=E4=E5 =E2=FA=F0=ED=
=E0=F2=E0 =EE=F2 =F4=F3=ED=EA=F6=E8=FF=F2=E0=20
=F7=F0=E5=E7 return. =C5=F2=EE =EF=F0=E8=EC=E5=F0=E5=ED =EA=EE=E4, =EA=EE=
=E9=F2=EE =F0=E0=E1=EE=F2=E8 =E8 =E2 PHP4, =E8 =E2 PHP5.

	// =E0=EA=EE =E2=F2=EE=F0=E8=FF=F2 =EF=E0=F0=E0=EC=E5=F2=FA=F0 =ED=E5 =E5=
 =EF=EE=E4=E0=E4=E5=ED, =EC=F3 =F1=EB=E0=E3=E0=EC=E5
	// =F1=F2=EE=E9=ED=EE=F1=F2 =EF=EE =EF=EE=E4=F0=E0=E7=E1=E8=F0=E0=ED=E5,=
 NULL
	function __get($propName,&$propValue =3D NULL) {
		// =E7=E0=E4=E0=E2=E0=EC=E5 =ED=FF=EA=E0=EA=E2=E0 =F1=F2=EE=E9=ED=EE=F1=
=F2 =ED=E0 $propValue1, =E2=F0=E5=EC=E5=ED=ED=E0 =EF=F0=EE=EC=E5=ED=EB=E8=
=E2=E0
		$propValue1 =3D $this->internalVars[$propName];

		// =E0=EA=EE =E5 =EF=EE=E4=E0=E4=E5=ED =E2=F2=EE=F0=E8=FF=F2 =EF=E0=F0=E0=
=EC=E5=F2=FA=F0, =F9=E5 =E2=FA=F0=ED=E5=EC =F0=E5=E7=F3=EB=F2=E0=F2=E0
		// =EF=F0=E5=E7 =ED=E5=E3=EE (=F1=F2=E8=EB PHP4), =E0=EA=EE =ED=E5 =E5,=
 =F9=E5 =E3=EE =E2=FA=F0=ED=E5=EC
		// =F7=F0=E5=E7 return (=F1=F2=E8=EB PHP5)
		if (!empty($propValue)) {
			return $propValue;
		} else {
			$propValue =3D &$propValue1;
			return true;
		}
	}

=CF=EE=E7=E4=F0=E0=E2=E8,
=C0=EB=E5=EA =C0=ED=E4=F0=E5=E5=E2
[email protected]
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
http://zvuk.net/mailman/listinfo/php
Bulgarskata PHP lista
Molia, pochistvaite suobshteniata si!
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D