$list = [ ['name' => 'John', 'age' => 31], ['name' => 'Mike', 'age' => 25], ['name' => 'Ben', 'age' => 27]];usort($list, function($a, $b) { if ($a['age'] == $b['age']) { return 0; } return ($a['age'] < $b['age']) ? -1 : 1;});
接下来,动态创建函数并将其保存到变量中,然后调用并终极销毁。
$sqrt = function($a) { return $a $a;};echo $sqrt(2);unset($sqrt);自动加载类
在PHP中编写面向工具的运用程序时,每个类创建一个文件是最佳实践。这样,类更随意马虎开拓和掩护,运用程序只能加载完成要求所需的类。这可以通过注册类自动加载功能来实现,该功能将在须要时包含类文件。以是不要写:
include \公众some/dir/Class1.php\公众include \"大众some/dir/Class2.php\"大众include \"大众some/dir/Class3.php\公众
你可以写
spl_autoload_register(function ($class) { include \公众some/dir/\公众 . $class . \公众.php\"大众;});
然后以下代码将正常事情。
$object1 = new Class1();$object2 = new Class2();// Class3 不会被加载将缺点转换为非常
PHP之前的PHP 7缺点报告有点乱。在PHP 7中有一些改进。将缺点转换为非常技能多年来一贯很好用,以是我想向您展示。这有几行,将改进您管理缺点的办法。
set_error_handler(function($errorNumber, $errorMessage, $errorFile, $errorLine) { throw new \ErrorException($errorMessage, 0, $errorNumber, $errorFile, $errorLine);});
以是现在你唯一须要担心的是捕获非常。这比压缩缺点,注册自定义处理程序和处理不同的缺点处理配置(在php.ini,运行时,自定义处理程序等)随意马虎得多。这是一个例子:
try { echo 5 / 0;} catch (Exception $e) { print_r($e);}魔术方法
面向工具的编程目前非常盛行,PHP供应了一种很好的办法将它提升到一个新的水平。Magic方法许可您调度对类的方法或属性的调用,并在发生特定操作时更新工具状态。
想象一下,你必须创建以下类:
class Person{ public $age = null; public $eyesColor = null; public $hairColor = null;}
您可以供应魔术方法__construct来设置创建的工具的默认值。
class Person{ public $age = null; public $eyesColor = null; public $hairColor = null; function __construct(){ $this->age = 20; $this->eyesColor = 'blue'; $this->hairColor = 'brown'; }}
您可以利用__set验证属性并利用__get检索它们。
class Person{ private $data = []; public $eyesColor = null; public $hairColor = null; function __set($name, $value) { if ($name === 'age') { if (is_int($value) && $value >= 18) { $this->data[$name] = $value; } else { throw new InvalidArgumentException('Age is invalid. Must be at least 18.'); } } } function __get($name) { return isset($this->data[$name]) ? $this->data[$name] : null; } function __isset($name) { return isset($this->data[$name]); } function __unset($name) { if (isset($this->data[$name])) { unset($this->data[$name]); } }}register_shutdown_function
顾名思义,此函数会注册一个函数,该函数将在要求实行即将完成时调用。我常常用它来检讨致命缺点和打印友好输出。
register_shutdown_function(function() { $errorData = error_get_last(); if (is_array($errorData)) { ob_end_clean(); echo 'Error occured! - ' . $errorData['message']; }});命令行
PHP紧张被称为支持我们网页的盛行做事器措辞之一。但它不仅仅适用于网页。您可以编写可以从命令行调用的有用脚本和程序。这是一个例子:
php hello-world.php -name John
变量$ argv包含通报的所有参数。索引0是文件名。
if (isset($argv[1]) && $argv[1] === '-help') { echo 'Enter -name <your-name> so I can greet you properly.'; exit();}if (isset($argv[1], $argv[2]) && $argv[1] === '-name') { echo 'Hello, ' . $argv[2]; exit();}echo 'Invalid command. Type -help for help.';exit();