13 php面向对象编程的相关技术
1 php面向对象编程的相关技术
1.1 对象遍历
class A{
public $name = "sora";
public $age = "20";
protected $abilty = "php";
private $hobby = "music";
public function display(){
echo "对象属性如下:<br/>";
foreach($this as $key => $value){
echo "$key=$value<br/>";
}
}
}
// 在类的外部只能遍历public属性
$a = new A;
foreach($a as $key => $value){
echo "$key=$value<br/>";
}
echo "-----------";
$a->display();
1.2 php内置标准类
如果,我们希望把一些数据,以对象的属性的方式存储,同时又不想去定义一个类,可以考虑使用php内置标准类stdClass。
php的内置标准类stdClass,这个是系统默认提供,不需要创建,直接使用。
案例说明:
$a = new stdClass;
var_dump($a);//什么都没有
$a->name = "sora";
$a->age = 20;
var_dump($a);
1.3 数据类型转对象和对象转数组的说明
//数组转对象
$arr = array('name'=>'sora','age'=>20);
$obj_arr = (object)$arr;
var_dump($obj_arr);
//访问数组对象的属性还是一样的方法
echo "<br/>$obj_arr->name";
echo "<br/>$obj_arr->age";
echo "<br>--------------<br/>";
//int转对象
$num = 11;
$obj_num = (object)$num;
var_dump($obj_num);
echo "<br/>----------<br/>";
//对象转数组
class Simple{
public $name = "kaze";
protected $age = "12";
private $address = "sn";
}
$simple = new Simple;
$simple_arr = (array)$simple;
var_dump($simple_arr);
echo "<br/>";
echo $simple_arr['Simpleaddress'];
// protected和private还是无法访问,即使转化为数组
1.4 对象序列化和反序列化
l 基本介绍
所谓对象序列化是指:将一个对象转换成一个字符串,这个字符串包括属性名,属性值,属性类型,和该对象对应的类名。简单来说就是把一个对象的数据和数据类型转成字符串。
class Test{
public $name;
protected $age;
private $food;
public function __construct($name,$age,$food){
$this->name = $name;
$this->age = $age;
$this->food = $food;
}
}
$test = new Test('sora','20','gohan');
$test_serial = serialize($test);
file_put_contents("D:/phpstudy/phpstudy_pro/WWW/test/Test.log",$test_serial);
只有序列号之后才能将一个对象存入文件。
l 反序列化操作
class Test{
public $name;
protected $age;
private $food;
public function __construct($name,$age,$food){
$this->name = $name;
$this->age = $age;
$this->food = $food;
}
}
$test_serial = file_get_contents("D:/phpstudy/phpstudy_pro/WWW/test/Test.log");
$test = unserialize($test_serial);
var_dump($test);
1.5 类与对象的相关函数
class A{
public $name = '路人a';
public function speak(){
echo "say something";
}
}
//判断类是否存在
if(class_exists('A')){
$a = new A;
if(property_exists($a,'name')){
echo "$a->name<br/>";
}else{
echo "属性不存在<br/>";
}
//判断成员方法是否存在
if(method_exists($a,'speak')){
$a->speak();
}else{
echo "此方法不存在";
}
//得到类名
echo get_class($a);
}else{
echo "类不存在<br/>";
}
其它的手册查。
1.6 traits技术
就相当于是用一句话就粘贴下了整个代码。需要修改也只需要修改trait里的代码段。
trait code{
public function getSum($num1,$num2){
return $num1+$num2;
}
public function getMax($num1,$num2,$num3){
return max($num1,$num2,$num3);
}
}
class A{
//如果trait里面的方法有和父类里一样的名字的,优先是trait里的方法
public function getSum($num1,$num2){
echo "The result is:";
return $num1+$num2;
}
}
class B extends A{
//使用trait代码段
use code;
}
class C extends A{
}
class D{
//使用trait代码段
use code;
}
$b = new B;
echo $b->getSum(1,2);
echo $b->getMax(2,3,4);
本文作者:xiaoovo
本文链接:https://www.cnblogs.com/xiaoovo/p/15968157.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步