最近积累的几个关于 PHP 类与 MySQL 的小问题
类的构造与析构方法
class A
{
public function __construct()
{
echo 'Class A living' . PHP_EOL;
}
public function __destruct()
{
echo 'Class A dead' . PHP_EOL;
}
}
class B
{
public function __construct()
{
echo 'Class B living' . PHP_EOL;
}
public function __destruct()
{
echo 'Class B dead' . PHP_EOL;
}
}
$a = new A();
$b = new B();
Class A living
Class B living
Class B dead
Class A dead
构造方法:类实例化时,调用的方法
析构方法:对象销毁时,调用的方法
Tip:类的实例是以堆栈的形式放在内存中,最后销毁的时候,按照先进后出的顺序。所以析构函数调用的顺序也是先进后出。
外部调用类的私有或受保护方法以及属性
class A
{
protected $protected = 'protected';
private $private = 'private';
protected function protectedMethod()
{
return 'Hello protected';
}
private function privateMethod()
{
return 'Hello private';
}
}
方法一
class A
{
public function __get($name)
{
return $this->$name;
}
public function __call($name, $arguments)
{
return $this->$name(...$arguments);
}
}
$test = new A();
$test->protected;
$test->private;
$test->protectedMethod();
$test->privateMethod();
方法二
$test = function () {
echo $this->private;
echo $this->privateMethod();
};
$test = $test->bindTo(new A(), 'A');
$test();
MySQL 小知识
关键字 join
有时候我们为了得到完整的结果,我们需要从两个或者多个表中获取我们的结果,需要用到 join 关键字。
- inner join
- left join
- right join
- full join
假如咱们有两张表
- customers id name …
- orders id customer_id amount …
-
列出所有顾客的订单
select * from customers inner join orders on customers.id = orders.customer_id
-
列出所有顾客以及他们的订单(如果有的话)
select * from customers left join orders on customers.id = orders.customer_id
-
列出所有订单,以及购买它们的顾客(如果有的话)
select * from customers right join orders on customers.id = orders.customer_id
-
列出所有顾客,所有订单
select * from customers full join orders on customers.id = orders.customer_id
是不是都非常容易,积少成多嘛!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: