¼Ì³Ð
¼Ì³ÐÒÑΪ´ó¼ÒËùÊìÖªµÄÒ»¸ö³ÌÐòÉè¼ÆÌØÐÔ£¬PHP µÄ¶ÔÏóÄ£ÐÍҲʹÓÃÁ˼̳С£¼Ì³Ð½«»áÓ°Ïìµ½ÀàÓëÀ࣬¶ÔÏóÓë¶ÔÏóÖ®¼äµÄ¹Øϵ¡£
±ÈÈ磬µ±À©Õ¹Ò»¸öÀ࣬×ÓÀà¾Í»á¼Ì³Ð¸¸ÀàËùÓй«ÓеĺÍÊܱ£»¤µÄ·½·¨¡£³ý·Ç×ÓÀา¸ÇÁ˸¸ÀàµÄ·½·¨£¬±»¼Ì³ÐµÄ·½·¨¶¼»á±£ÁôÆäÔÓй¦ÄÜ¡£
¼Ì³Ð¶ÔÓÚ¹¦ÄܵÄÉè¼ÆºÍ³éÏóÊǷdz£ÓÐÓõģ¬¶øÇÒ¶ÔÓÚÀàËƵĶÔÏóÔö¼Óй¦ÄܾÍÎÞÐëÖØÐÂÔÙдÕâЩ¹«ÓõŦÄÜ¡£
³ý·ÇʹÓÃÁË×Ô¶¯¼ÓÔØ£¬·ñÔòÒ»¸öÀà±ØÐëÔÚʹÓÃ֮ǰ±»¶¨Òå¡£Èç¹ûÒ»¸öÀàÀ©Õ¹ÁËÁíÒ»¸ö£¬Ôò¸¸Àà±ØÐëÔÚ×ÓÀà֮ǰ±»ÉùÃ÷¡£´Ë¹æÔòÊÊÓÃÓÚÀà¼Ì³ÐÆäËüÀàÓë½Ó¿Ú¡£
class MyClass{ protected function myFunc() { echo "MyClass::myFunc()\n"; }
}
class OtherClass extends MyClass{ // ¸²¸ÇÁ˸¸ÀàµÄ¶¨Òå public function myFunc() { // µ«»¹ÊÇ¿ÉÒÔµ÷Óø¸ÀàÖб»¸²¸ÇµÄ·½·¨ parent::myFunc(); echo "OtherClass::myFunc()\n"; }
}
$class = new OtherClass();$class->myFunc();/** * Êä³ö½á¹û -> * MyClass::myFunc() * OtherClass::myFunc() */?>Static£¨¾²Ì¬£©¹Ø¼ü×Ö
ÉùÃ÷ÀàÊôÐÔ»ò·½·¨Îª¾²Ì¬£¬¾Í¿ÉÒÔ²»ÊµÀý»¯Àà¶øÖ±½Ó·ÃÎÊ¡£¾²Ì¬ÊôÐÔÓ¦ÓÃÓÚ±£´æÀàµÄ¹²ÓÐÊý¾Ý¡£
¾²Ì¬ÊôÐÔ²»ÄÜͨ¹ýÒ»¸öÀàÒÑʵÀý»¯µÄ¶ÔÏóÀ´·ÃÎÊ£¨µ«¾²Ì¬·½·¨¿ÉÒÔ£©¡£
ÓÉÓÚ¾²Ì¬·½·¨²»ÐèҪͨ¹ý¶ÔÏ󼴿ɵ÷Óã¬ËùÒÔα±äÁ¿$thisÔÚ¾²Ì¬·½·¨Öв»¿ÉÓ᣾²Ì¬ÊôÐÔ²»¿ÉÒÔÓɶÔÏóͨ¹ý -> ²Ù×÷·ûÀ´·ÃÎÊ¡£¾²Ì¬·½·¨ÀïÃæÖ»ÄÜ·ÃÎʾ²Ì¬ÊôÐÔ¡£
Óþ²Ì¬·½Ê½µ÷ÓÃÒ»¸ö·Ç¾²Ì¬·½·¨»áµ¼ÖÂÒ»¸öE_STRICT¼¶±ðµÄ´íÎó¡£ÀàµÄÄÚ²¿¿ÉÒÔͨ¹ýself»òÕßstatic¹Ø¼ü×Ö·ÃÎÊ×ÔÉí¾²Ì¬³ÉÔ±¡£
¾ÍÏñÆäËüËùÓÐµÄ PHP
¾²Ì¬±äÁ¿Ò»Ñù£¬¾²Ì¬ÊôÐÔÖ»Äܱ»³õʼ»¯ÎªÎÄ×Ö»ò³£Á¿£¬²»ÄÜʹÓñí´ïʽ¡£ËùÒÔ¿ÉÒ԰Ѿ²Ì¬ÊôÐÔ³õʼ»¯ÎªÕûÊý»òÊý×飬µ«²»Äܳõʼ»¯ÎªÁíÒ»¸ö±äÁ¿»òº¯Êý·µ»ØÖµ£¬Ò²²»ÄÜÖ¸ÏòÒ»¸ö¶ÔÏó¡£
×Ô PHP 5.3.0 Æ𣬿ÉÒÔÓÃÒ»¸ö±äÁ¿À´¶¯Ì¬µ÷ÓÃÀà¡£µ«¸Ã±äÁ¿µÄÖµ²»ÄÜΪ¹Ø¼ü×Öself£¬parent»òstatic¡£¿ÉÒÔͨ¹ýparent¹Ø¼ü×Ö·ÃÎʸ¸ÀàµÄ¾²Ì¬³ÉÔ±£¬¿ÉÒÔͨ¹ýÀàµÄÃû³ÆÔÚÀඨÒåÍⲿ·ÃÎʾ²Ì¬³ÉÔ±¡£
class Human{
static public $name = "СÃÃ";
public $height = 180;
static public function tell(){
echo self::$name;//¾²Ì¬·½·¨µ÷Óþ²Ì¬ÊôÐÔ£¬Ê¹ÓÃself¹Ø¼ü´Ê
//echo $this->height;//´í¡£¾²Ì¬·½·¨²»Äܵ÷Ó÷Ǿ²Ì¬ÊôÐÔ
//ÒòΪ $this´ú±íʵÀý»¯¶ÔÏ󣬶øÕâÀïÊÇÀ࣬²»ÖªµÀ $this ´ú±íÄĸö¶ÔÏó
}
public function say(){
echo self::$name . "ÎÒ˵»°ÁË";
//ÆÕͨ·½·¨µ÷Óþ²Ì¬ÊôÐÔ£¬Í¬ÑùʹÓÃself¹Ø¼ü´Ê
echo $this->height;
}
}
$p1 = new Human();
$p1->say();
$p1->tell();//¶ÔÏó¿ÉÒÔ·ÃÎʾ²Ì¬·½·¨
echo $p1::$name;//¶ÔÏó·ÃÎʾ²Ì¬ÊôÐÔ¡£²»ÄÜÕâô·ÃÎÊ
$p1->name//ÒòΪ¾²Ì¬ÊôÐÔµÄÄÚ´æλÖò»ÔÚ¶ÔÏóÀï
Human::say();//´í¡£say()·½·¨ÓÐ$thisʱ³ö´í£»Ã»ÓÐ$thisʱÄܳö½á¹û
//µ«php5.4ÒÔÉÏ»áÌáʾ
?>Êý¾Ý·ÃÎÊ
1.parent¹Ø¼ü×Ö¿ÉÒÔ·ÃÎʸ¸ÀàÖб»×ÓÀàÖØдµÄ·½·¨¡£
2.self¹Ø¼ü×Ö¿ÉÒÔÓÃÓÚ·ÃÎÊÀà×ÔÉíµÄ³ÉÔ±·½·¨£¬Ò²¿ÉÒÔÓÃÓÚ·ÃÎÊ×ÔÉíµÄ¾²Ì¬³ÉÔ±ºÍÀà³£Á¿£»²»ÄÜÓÃÓÚ·ÃÎÊ×ÔÉíµÄÊôÐÔ£»Ê¹Óó£Á¿µÄʱºò²»ÐèÒªÔÚ³£Á¿Ãû³ÆÇ°¼Ó$·ûºÅ¡£
3.static¹Ø¼ü×ÖÓÃÓÚ·ÃÎÊÀà×ÔÉí¶¨ÒåµÄ¾²Ì¬³ÉÔ±£¬·ÃÎʾ²Ì¬ÊôÐÔʱÐèÒªÔÚÊôÐÔÇ°ÃæÌí¼Ó$·ûºÅ
}
class ChildClass extends BaseClass{public function a(){echo "a() from ChildClass\n";parent::a(); //·ÃÎʸ¸ÀàµÄa·½·¨£»self::b(); //·ÃÎÊ×ÔÉíÀàb·½·¨echo self::MM; //·ÃÎÊ×ÔÉí³£Á¿}const MM = "i am constent";private function b(){echo "b() from ChildClass";}
}
$class = new ChildClass();
$class->a();
³éÏóÀà
PHP 5 Ö§³Ö³éÏóÀàºÍ³éÏó·½·¨¡£¶¨ÒåΪ³éÏóµÄÀ಻Äܱ»ÊµÀý»¯¡£ÈκÎÒ»¸öÀ࣬Èç¹ûËüÀïÃæÖÁÉÙÓÐÒ»¸ö·½·¨ÊDZ»ÉùÃ÷Ϊ³éÏóµÄ£¬ÄÇôÕâ¸öÀà¾Í±ØÐë±»ÉùÃ÷Ϊ³éÏóµÄ¡£±»¶¨ÒåΪ³éÏóµÄ·½·¨Ö»ÊÇÉùÃ÷ÁËÆäµ÷Ó÷½Ê½£¨²ÎÊý£©£¬²»Äܶ¨ÒåÆä¾ßÌåµÄ¹¦ÄÜʵÏÖ¡£
¼Ì³ÐÒ»¸ö³éÏóÀàµÄʱºò£¬×ÓÀà±ØÐ붨Ò常ÀàÖеÄËùÓгéÏó·½·¨£»ÁíÍ⣬ÕâЩ·½·¨µÄ·ÃÎÊ¿ØÖƱØÐëºÍ¸¸ÀàÖÐÒ»Ñù£¨»òÕ߸üΪ¿íËÉ£©¡£ÀýÈçij¸ö³éÏó·½·¨±»ÉùÃ÷ΪÊܱ£»¤µÄ£¬ÄÇô×ÓÀàÖÐʵÏֵķ½·¨¾ÍÓ¦¸ÃÉùÃ÷ΪÊܱ£»¤µÄ»òÕß¹«Óеģ¬¶ø²»Äܶ¨ÒåΪ˽Óеġ£´ËÍâ·½·¨µÄµ÷Ó÷½Ê½±ØÐëÆ¥Å䣬¼´ÀàÐͺÍËùÐè²ÎÊýÊýÁ¿±ØÐëÒ»Ö¡£ÀýÈ磬×ÓÀඨÒåÁËÒ»¸ö¿ÉÑ¡²ÎÊý£¬¶ø¸¸Àà³éÏó·½·¨µÄÉùÃ÷ÀïûÓУ¬ÔòÁ½ÕßµÄÉùÃ÷²¢ÎÞ³åÍ»¡£
ÕâÒ²ÊÊÓÃÓÚ PHP 5.4 ÆðµÄ¹¹Ô캯Êý¡£ÔÚ PHP 5.4 ֮ǰµÄ¹¹Ô캯ÊýÉùÃ÷¿ÉÒÔ²»Ò»ÑùµÄ¡£
abstract class AbstractClass{ // Ç¿ÖÆÒªÇó×ÓÀඨÒåÕâЩ·½·¨ abstract protected function getValue(); abstract protected function prefixValue($prefix); // ÆÕͨ·½·¨£¨·Ç³éÏó·½·¨£© public function printOut() { print $this->getValue() . "\n"; }
}
class ConcreteClass1 extends AbstractClass{ protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; }
}
class ConcreteClass2 extends AbstractClass{ public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";
$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";
?>½Ó¿Ú
ʹÓýӿڣ¨interface£©£¬¿ÉÒÔÖ¸¶¨Ä³¸öÀà±ØÐëʵÏÖÄÄЩ·½·¨£¬µ«²»ÐèÒª¶¨ÒåÕâЩ·½·¨µÄ¾ßÌåÄÚÈÝ¡£
½Ó¿ÚÊÇͨ¹ýinterface¹Ø¼ü×ÖÀ´¶¨ÒåµÄ£¬¾ÍÏñ¶¨ÒåÒ»¸ö±ê×¼µÄÀàÒ»Ñù£¬µ«ÆäÖж¨ÒåËùÓеķ½·¨¶¼Êǿյġ£
½Ó¿ÚÖж¨ÒåµÄËùÓз½·¨¶¼±ØÐëÊǹ«ÓУ¬ÕâÊǽӿڵÄÌØÐÔ¡£
ҪʵÏÖÒ»¸ö½Ó¿Ú£¬Ê¹ÓÃimplements²Ù×÷·û¡£ÀàÖбØÐëʵÏÖ½Ó¿ÚÖж¨ÒåµÄËùÓз½·¨£¬·ñÔò»á±¨Ò»¸öÖÂÃü´íÎó¡£Àà¿ÉÒÔʵÏÖ¶à¸ö½Ó¿Ú£¬ÓöººÅÀ´·Ö¸ô¶à¸ö½Ó¿ÚµÄÃû³Æ¡£ÊµÏÖ¶à¸ö½Ó¿Úʱ£¬½Ó¿ÚÖеķ½·¨²»ÄÜÓÐÖØÃû¡£
½Ó¿ÚÒ²¿ÉÒԼ̳У¬Í¨¹ýʹÓà extends ²Ù×÷·û¡£
ÀàҪʵÏÖ½Ó¿Ú£¬±ØÐëʹÓúͽӿÚÖÐËù¶¨ÒåµÄ·½·¨ÍêÈ«Ò»Öµķ½Ê½¡£·ñÔò»áµ¼ÖÂÖÂÃü´íÎó¡£½Ó¿ÚÖÐÒ²¿ÉÒÔ¶¨Òå³£Á¿¡£
½Ó¿Ú³£Á¿ºÍÀà³£Á¿µÄʹÓÃÍêÈ«Ïàͬ£¬µ«ÊDz»Äܱ»×ÓÀà»ò×Ó½Ó¿ÚËù¸²¸Ç¡£
// ÉùÃ÷Ò»¸ö'iTemplate'½Ó¿Ú
interface iTemplate{ public function setVariable($name, $var); public function getHtml($template);}// ʵÏÖ½Ó¿Ú
// ÏÂÃæµÄд·¨ÊÇÕýÈ·µÄclass Template implements iTemplate{ private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; }
}
¼Ì³Ð¶à¸ö½Ó¿Ú
interface a{ public function foo();
}
interface b{ public function bar();
}
interface c extends a, b{ public function baz();
}
class d implements c{ public function foo() { } public function bar() { } public function baz() { }
}
?>Trait
×Ô PHP 5.4.0 Æð£¬PHP ʵÏÖÁËÒ»ÖÖ´úÂ븴Óõķ½·¨£¬³ÆΪ trait¡£
Trait ÊÇΪÀàËÆ PHP µÄµ¥¼Ì³ÐÓïÑÔ¶ø×¼±¸µÄÒ»ÖÖ´úÂ븴ÓûúÖÆ¡£Trait
ΪÁ˼õÉÙµ¥¼Ì³ÐÓïÑÔµÄÏÞÖÆ£¬Ê¹¿ª·¢ÈËÔ±Äܹ»×ÔÓɵØÔÚ²»Í¬²ã´Î½á¹¹ÄÚ¶ÀÁ¢µÄÀàÖи´Óà method¡£Trait
ºÍ Class ×éºÏµÄÓïÒ嶨ÒåÁËÒ»ÖÖ¼õÉÙ¸´ÔÓÐԵķ½Ê½£¬±ÜÃ⴫ͳ¶à¼Ì³ÐºÍ Mixin ÀàÏà¹ØµäÐÍÎÊÌâ¡£
}
class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */
}
class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */
}
?>
´Ó»ùÀà¼Ì³ÐµÄ³ÉÔ±»á±» trait ²åÈëµÄ³ÉÔ±Ëù¸²¸Ç¡£ÓÅÏÈ˳ÐòÊÇÀ´×Ôµ±Ç°ÀàµÄ³ÉÔ±¸²¸ÇÁË trait µÄ·½·¨£¬¶ø trait Ôò¸²¸ÇÁ˱»¼Ì³ÐµÄ·½·¨¡£¶à¸ö trait£¬Í¨¹ý¶ººÅ·Ö¸ô£¬ÔÚ use ÉùÃ÷Áгö¶à¸ö trait£¬¿ÉÒÔ¶¼²åÈëµ½Ò»¸öÀàÖС£
Final ¹Ø¼ü×Ö
PHP 5 ÐÂÔöÁËÒ»¸ö final ¹Ø¼ü×Ö¡£Èç¹û¸¸ÀàÖеķ½·¨±»ÉùÃ÷Ϊ
final£¬Ôò×ÓÀàÎÞ·¨¸²¸Ç¸Ã·½·¨¡£Èç¹ûÒ»¸öÀà±»ÉùÃ÷Ϊ final£¬Ôò²»Äܱ»¼Ì³Ð¡£
Example #1 Final ·½·¨Ê¾Àý
class BaseClass { public function test() { echo "BaseClass::test() called\n"; } final public function moreTesting() { echo "BaseClass::moreTesting() called\n"; }
}
class ChildClass extends BaseClass { public function moreTesting() { echo "ChildClass::moreTesting() called\n"; }
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>
Example #2 Final ÀàʾÀý
final class BaseClass { public function test() { echo "BaseClass::test() called\n"; } // ÕâÀïÎÞÂÛÄãÊÇ·ñ½«·½·¨ÉùÃ÷Ϊfinal£¬¶¼Ã»ÓйØϵ final public function moreTesting() { echo "BaseClass::moreTesting() called\n"; }
}
class ChildClass extends BaseClass {}
// ²úÉú Fatal error: Class ChildClass may not inherit from final class (BaseClass)
?>
ÒÔÉÏ¡£
end
ÎÄ/±à¼£ºatong
ÅÅ°æ²¼¾Ö£ºatong
Time : 2018/2/28
ÁìȡרÊô 10ÔªÎÞÃż÷ȯ
˽Ïí×îР¼¼Êõ¸É»õ