php入门到就业线上直播课:进入学习
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API调试工具:点击使用
PHP5.1:
PHP5.2:
PHP5.3:
__callStatic()
和__invoke()
__DIR__
PHP5.4:
PHP5.5:
PHP5.6:
PHP7.0:
PHP7.1:
PHP7.2:
PHP7.3:语法层面没有很大的改变
PHP7.4:
PHP8.0:
function __autoload($className) {
$filePath = “project/class/{$className}.php”;
if (is_readable($filePath)) {
require($filePath); //这里可以只用require,因为一旦包含进来后,php引擎再遇到类A时,将不会调用__autoload,而是直接使用内存中的类A,不会导致多次包含。
}
}
$a = new A();
$b = new B();
$c = new C();
PHP中__autoload()魔术方法详解
可以通过 PHP 的 phpinfo() 函数来查看是否安装了PDO扩展。
//Linux
extension=pdo.so
//Windows
extension=php_pdo.dll
<?php
$dbms='mysql'; //数据库类型
$host='localhost'; //数据库主机名
$dbName='test'; //使用的数据库
$user='root'; //数据库连接用户名
$pass=''; //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
echo "连接成功<br/>";
/*你还可以进行一次搜索操作
foreach ($dbh->query('SELECT * from FOO') as $row) {
print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
}
*/
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
PHP PDO
mysqli连接是永久连接,而mysql是非永久连接。
mysql连接每当第二次使用的时候,都会重新打开一个新的进程。mysqli连接一直都只使用同一个进程。
$conn = mysqli_connect('localhost', 'root', '123', 'db_test') or ('error');
$sql = "select * from db_table";
$query = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($query)){
echo $row['title'];
}
mysqli和mysql的区别是什么
通过类型约束可以限制参数的类型,不过这一机制并不完善,目前仅适用于类和 callable(可执行类型) 以及 array(数组), 不适用于 string 和 int.
// 限制第一个参数为 MyClass, 第二个参数为可执行类型,第三个参数为数组
function MyFunction(MyClass $a, callable $b, array $c)
{
// ...
}
<?php
namespace XXX; // 命名空间的分隔符是反斜杠,该声明语句必须在文件第一行。
$func = function($arg)
{
print $arg;
};
$func("Hello World! hovertree.top");
__callStatic()
和__invoke()
__callStatic()
:用静态方式中调用一个不可访问方法时调用
__invoke()
:以调用函数的方式调用一个对象时的回应方法
$person = new Person('小明'); // 初始赋值
$person(); //触发__invoke()
__DIR__
如当前执行的PHP文件为 /htdocs/index.php,则__FILE__
等于’/htdocs/index.php’,而__DIR__
等于’/htdocs’。
public static function test($userName)
{
//...
}
$className = 'cls';
$className::test('Tom'); // PHP >= 5.3.0
这是因为 self 的语义本来就是“当前类”,所以 PHP5.3 给 static 关键字赋予了一个新功能:后期静态绑定
class A
{
static public function callFuncXXOO()
{
print self::funcXXOO();
}
static public function funcXXOO()
{
return "A::funcXXOO()";
}
}
class B extends A
{
static public function funcXXOO()
{
return "B::funcXXOO";
}
}
$b = new B;
$b->callFuncXXOO(); //A::funcXXOO()
class A
{
static public function callFuncXXOO()
{
print static::funcXXOO();
}
// ...
}
B::callFuncXXOO(); //B::funcXXOO()
常量是一个简单的标识符。在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量)。常量默认大小写敏感。通常常量标识符总是大写的。
可以用define()函数来定义常量。在php5.3.0以后,可以使用const关键字在类定义的外部定义常量,先前版本const关键字只能在类(class)中使用。一个常量一旦被定义,就不能再改变或取消定义。
const是一个语言结构,而define是一个函数。const在编译时要比define快很多。
const用于类成员变量的定义,一经定义,不可修改。Define不可以用于类成员变量的定义,可用于全局常量。
Const可在类中使用,define不能
Const不能在条件语句中定义常量
const采用普通的常量名称,define可以采用表达式作为名称
const只能接受静态的标量,而define可以采用任何表达式
const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
PHP常量两种定义方法:define和const有什么区别
从PHP 5.3开始,通过排除中间表达式,甚至可以进一步简化三元语句。 如果测试表达式在布尔上下文中评估为true,则返回其值。 否则,将返回替代方法。
<?php
$favoriteColor = $_GET["color"] ?: "pink";
创建一个phar压缩包
$phar = new Phar('swoole.phar');
$phar->buildFromDirectory(__DIR__.'/../', '/.php$/');
$phar->compressFiles(Phar::GZ);
$phar->stopBuffering();
$phar->setStub($phar->createDefaultStub('lib_config.php'));
使用phar压缩包
include 'swoole.phar';
include 'swoole.phar/code/page.php';
使用phar可以很方便的打包你的代码,集成部署到线上机器。
php phar教程,PHP中phar包的使用教程
PHP 5.3中的新特性及被弃用的功能函数总结
PHP5各个版本的新功能和新特性总结
//可以把
<?php echo $xxoo;?>
//简写成:
<?= $xxoo;?>
// 原来的数组写法
$arr = array("key" => "value", "key2" => "value2");
// 简写形式
$arr = ["key" => "value", "key2" => "value2"];
// Traits不能被单独实例化,只能被类所包含
trait SayWorld
{
public function sayHello()
{
echo 'World!';
}
}
class MyHelloWorld
{
// 将SayWorld中的成员包含进来
use SayWorld;
}
$xxoo = new MyHelloWorld();
// sayHello() 函数是来自 SayWorld 构件的
$xxoo->sayHello();
基类中的成员函数将被Traits中的函数覆盖,当前类中的成员函数将覆盖Traits中的函数。
php5.4新功能Traits介绍
PHP从5.4开始内置一个轻量级的Web服务器,不支持并发,定位是用于开发和调试环境。
在开发环境使用它的确非常方便。
php -S localhost:8000
$func = "funcXXOO";
A::{$func}();
(new MyClass)->xxoo();
php5.4总结
yield关键字用于当函数需要返回一个迭代器的时候,逐个返回值。
function number10()
{
for($i = 1; $i <= 10; $i += 1)
yield $i;
}
$array = [
[1, 2, 3],
[4, 5, 6],
];
foreach ($array as list($a, $b, $c))
echo "{$a} {$b} {$c}\n";