PHP sprintf与printf
sprintf
与printf
不同之处就在于sprintf
不用于输出,而是将格式化的字符串以返回值的形式赋值,虽然还是不明觉历的状态啊OTZ
这两个就比较像C语言了,还没学,说不定差不多
sprintf
与printf
不同之处就在于sprintf
不用于输出,而是将格式化的字符串以返回值的形式赋值,虽然还是不明觉历的状态啊OTZ
这两个就比较像C语言了,还没学,说不定差不多
<?php
class Single {
private static $element = NULL;
private function __construct() {
echo "Hello World! ";
}
static function get() {
if(is_null(self::$element)) {
self::$element = new self();
echo 'I will never give up. ';
return self::$element;
}
}
}
$single = Single::get();
$double = Single::get();
核心在于static
是属于类而不是属于对象的,所以改变值会反应到类。设定初值为NULL
,在方法里赋值,而如果是NULL
,在方法里调用,赋为new self()
在外界就变成了$single = new Single()
,而$double
调用时什么都不会发生了,此时静态变量已经不是NULL
了不会进入判断体
抽象类访问权限不能是private
可以有不是抽象属性和抽象方法 所以抽象方法前要加abstract
如果有抽象方法 这个类就是抽象类 前要加abstract
继承用extends
子类必须定义所有抽象方法,抽象方法不能实例化对象,子类使用implements
关联接口
接口内不能声明变量 只能声明常量,并且所有成员权限都是public
接口声明用interface
一个类可以由一个父类但可以有许多接口,必须要将所有接口中的抽象方法全部实现才能创造对象,所以接口可以用于规范化和追加功能
题目是酱紫的:
以下会输出啥?
<?php
class sample {
function __call($a, $b) {
echo ucwords(implode(' ', $b).' '.$a); //每个单词首字母大写
}
function ads() {
ob_start(); //打开缓冲控制
echo 'by';
return $this;
}
function ade() {
$c = ob_get_clean();
$this->php('brophp', $c);
}
}
$inst = new sample();
public
可以被同一个类、子类、外部访问和调用
protected
只能被同一个类 子类调用和访问
private
只能被同一个类 调用和访问
static
的成员属性或者方法可以不实体化直接通过self::
来调用 也可以通过实体化$this->
并且static
属于类而不属于具体对象,数据会共享
const
只能通过self::
来访问 常量通常都是大写而且没有$
`final`代表不能被继承和重构
__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等方法在 PHP 中被称为"魔术方法"(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
__construct()
,__destruct()
构造函数和析构函数,一个在调用的时候设定默认值啦,或者是方便赋protected
或者private
的值,另一个在对象销毁前被调用,__destruct()
内不能有任何参数。
在对象中调用一个不可访问方法时,__call()
会被调用。
用静态方式中调用一个不可访问方法时,__callStatic()
会被调用。参数由方法,数组组成。
__get()
,__set()
,一个可以外部调用的属性设为只读,一个只写,参数由成员属性名,成员属性的值组成。
__isset()
,__unset()
在外部使用isset()
unset()
会调用这两个方法
__sleep()
,__wakeup()
在串行化和反串行化调用输出
__toString()
,__invoke()
__toString
可以在echo
对象的时候调用输出字符串,以函数方法调用对象时会触发__invoke()
__clone()
不需要任何参数,当对象使用clone $xxx
时被调用,原本对象的引用 $that->
克隆对象$this->
__set_state()
当调用 var_export()
导出类时,此静态 方法会被调用。