-
用trait实现多继承
查看全部 -
static会根据上下文调用静态方法(因此截图中b::test()会调用class b 重写后的who())
查看全部 -
默认浅拷贝(是地址)
深拷贝(是值)不会相互影响$b= clone $a;
查看全部 -
?!important
查看全部 -
<?php
class Computer{
public function __construct()
{
echo " ";
}
public function game() { echo "-----------"; }
}
$computer=new Computer();
$computer->game();
?>
查看全部 -
单例模式
public static function getInstance()
{
if(!(self::$_instance instanceof of self)){
self::$_insance = new self();
}
return self::$_instance;
}
判断 $_instance 是否为 当前类的事例
查看全部 -
查看全部
-
interface Ia
interface Ib
interface AB extends Ia, Ib - 继承
class Test implements AB - 实现
查看全部 -
查看全部
-
查看全部
-
2-3 命名空间
常量定义 - const 和 define 的区别
define 定义的常量是全局的,不受命名空间影响; 如果要定义受命名空间影响的常量,就要使用 const 。
以下类型会受到命名空间的影响:
类(包括抽象类、traits)、接口、函数和常量
use 关键词 - 导入
use ... as ... 关键词 - 导入 & 使用别名
use - 导入类
use function ... - 导入函数
use const ... 导入常量
namespace index;
include '3.php';
var_dump(new \Test1());
备注: \ 反斜杠表示全局空间
查看全部 -
this是对象,parent和self是类,self是自身这个类,parent是父类,static是上下文中的当前类,不知道这样理解对不对。
查看全部 -
<?php
class test1{
public static function __callStatic($model,$arga)
{
echo $model."<br />";
print_r($arga);
}
}
test1::go(1,'ok');
echo "<hr />";
class A{
public function go()
{
echo 'gogogogog....';
}
}
function test(A $a)
{
$a->go();
}
test(new A());
echo "<hr /> 单例模式:";
class Test{
private static $_instance = null;
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance()
{
if(!(self::$_instance instanceof self)){
self::$_instance = new self();
}
return self::$_instance;
}
}
$test1 = Test::getInstance();
$test2 = Test::getInstance();
$test3 = Test::getInstance();
var_dump($test1);
var_dump($test2);
var_dump($test3);
echo "<hr /> 工厂模式:便于底层类的批量修改";
class Redis
{
public function set(){}
public function get(){}
}
class Cache
{
public static function factory()
{
return new Redis();
}
}
$Cache = Cache::factory();
var_dump($Cache->set());
echo "<hr />";
?>
final 不被继承的,可以放到类或者方法的前面。
全局空间的类,前面加上"\"。(use \Test1;)
__autoload 当未找到引入的类,则会自动实现实例化类名的路由。
spl_autoload_register(function($className){
require str_replace("\\","/",$className . '.php');
});
替代__autoload自动加载类的方法。
当为类里面的属性加上“static”关键字后,可以直接通过类名调用。
类的后期静态绑定:子类中有父类的同名函数,继承之后,若想调用子类的同名函数,则父类的方法加“static::who()”。
魔术方法:
__set();__get();
__isset();判断私有属性(private)是否存在。
__unset();删除私有属性。
__call();调用的方法不存在时,自动调用此方法。
__callStatic();当发现调用的静态方法不存在时,则自动调用此方法。
__invoke();将对象以函数方式调用。test('go...');
__toString();直接打印对象函数。echo(test);
__clone();将浅拷贝,变成深拷贝。
PHP中对象的赋值是浅拷贝。深拷贝用clone。
trait类,可以用use方法调用。
interface接口类,不实现方法。
abstract抽象类,既可以定义接口,又可以实现方法。
单例模式和工厂模式:
单例模式同一个类,不用被实例化多次,从而节省内存。
查看全部 -
常量一经定义不可更改
查看全部 -
不同类中,同名方法可以存在
查看全部
举报