最新消息:爱T-blog 最新域名 blog.itiwin.cn !!! php技术博客 magento博客

php高级特性

什么是抽象类?什么是接口?分别适用于何种场景?

定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性。

  • 接口没有构造函数,抽象类可以有构造函数。
  • 接口中的方法默认都是public类型的。而抽象类中的方法可以使用private,protected或public来修饰。
  • 一个类可以同时实现多个接口。一个类只能继承一个抽象类。

抽象类还是接口

  • 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建由一些不相关对象采用的功能,就使用接口。
  • 如果必须从多个来源继承行为,就使用接口。
  • 如果知道所有类都会共享一个公共的行为实现,就可以使用抽象类,并在其中实现该行为。

Traits是什么?

Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

怎样使用Trait?

[php]

trait Hello {
public function sayHello() {
echo ‘Hello ‘;
}
}

trait World {
public function sayWorld() {
echo ‘World!’;
}
}

trait HelloWorld {
use Hello, World;
}

class MyHelloWorld {
use HelloWorld;
}

$ca=new MyHelloWorld();
$ca->sayHello();
$ca->sayWorld();

[/php]

yield是什么东西?

[php]

function xrange($start, $limit, $step = 1) {
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
}

echo ‘Single digit odd numbers: ‘;

/* 注意保存在内存中的数组绝不会被创建或返回 */
foreach (xrange(1, 9, 2) as $number) {
echo “$number “;
}

//Single digit odd numbers: 1 3 5 7 9

[/php]

PHP中有哪些魔术方法?

__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为”魔术方法”(Magic methods)

怎么样调用匿名函数?怎样在匿名函数中使用外部变量?

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

[php]

$greet = function($name)
{
printf(“Hello %s\r\n”, $name);
};

$greet(‘World’);
$greet(‘PHP’);

// 继承 $message
$message=’as’;
$example = function () use ($message) {
var_dump($message);
};
var_dump($example);

[/php]

 

php多进程?

[php]

ini_set(‘default_socket_timeout’, -1);
define(“MAX_CHILD_COUNT”, 10);

$childs = array();
while (1) {
$pid = pcntl_fork();
switch ($pid) {
case -1:
echo “fork error : {$i} \r\n”;
exit;
case 0:
//子进程
while (1) {
//子进程处理的方法
}
//sleep(5);
exit;
default:
//主进程
echo $pid.”\n”;
$childs[] = $pid;

echo “进程数量:”.count($childs).”\n”;
while(count($childs) >= MAX_CHILD_COUNT) {
foreach($childs as $key => $pid) {
$res = pcntl_waitpid($pid, $status, WNOHANG);
// If the process has already exited
if($res == -1 || $res > 0) {
unset($childs[$key]);
}
}

sleep(10);
}
break;
}
}

[/php]

转载请注明:爱T-blog » php高级特性

与本文相关文章

发表我的评论

取消评论
表情 插代码

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项

网友评论1

  1. 又没有php7的 特性

    mall2016-02-02 13:50 回复