您现在的位置:首页 > 教案格式 > 正文

数组换位置一.介绍 PHP(外文名:PHP: Hyperte(24)

2018-02-02 05:05 网络整理 教案网

用foreach语句进行遍历(只能遍历可访问的属性)

<?php
class C1{
  public $v1 = 1;
  protected $v2 = 2;
  private $v3 = 3;
  public function fetchAllProp(){
    foreach($this as $key => $value){
      echo "$key => $value".PHP_EOL;
    }
  }
}
$o1 = new C1();
//只有1
foreach($o1 as $key => $value){
  echo "$key => $value".PHP_EOL;
}
echo "---".PHP_EOL;
//有1,2,3
$o1->fetchAllProp();

stdclass:该类内部没有定义任何属性,但我们还是可以使用该类的属性(不存在的属性)

<?php
var_dump($obj = new stdclass());
$obj->v1 = 1;
$obj->v2 = 2;
var_dump($obj);

对象转换为对象:没有变化

数组转换为对象:数组的键名当作属性名,值为对应值(数字下标的属性无法用"->"操作)

null转换为对象:空对象

其他标量数据转换为对象:属性名为固定的“scalar”,值为该变量的值

<?php
var_dump($o_arr = (object) array("v1" => 1,"v2"=>2,3,4));
var_dump($n_arr = (object) null);
var_dump($n_arr = (object) 1);

php是弱类型语言,其特点是无需为变量指定类型,而且在其后也可以存储任何类型。

但在php的较新的语法中,在某些特定场合,针对某些特定类型,也可以进行语法约束。

特定场合:函数(或方法)的形参变量

特定类型:对象类型(类名),接口类型(接口名),数组类型(array),函数类型(callable)

<?php
class C1{}
interface I1{}
class C2 implements I1{}
function f1(C1 $v){//只能传该类的对象
  var_dump($v);
}
function f2(I1 $v){//只能传实现该接口的类的对象
  var_dump($v);
}
function f3(array $v){//只能传数组
  var_dump($v);
}
function f4(callable $v){//只能传函数
  var_dump($v);
}

当对一个对象进行“序列化”操作的时候,会自动调用类中的__sleep()方法;

当“反序列化”一个对象的时候,会自动调用对应类中的__wakeup()方法;

<?php
class C1{
  public $v1 = 1;
  public $v2 = 2;
  function __sleep(){//只保存C1
    echo "__sleep";
    return array(‘v1‘);
  }
  function __wakeup(){//经常用于重新建立数据库连接,或执行其它初始化操作。 
    echo "__wakeup";
  }
}
var_dump($s = serialize(new C1));
file_put_contents(‘./test_serialize‘, $s);
var_dump(unserialize(file_get_contents(‘./test_serialize‘)));
__tostring()