<?php
//PHP oop学习
class Person{
public
$name;
public $age;
public $height;
function
getInstance($name,$age,$height){
$obj_person = new
Person();
$obj_person->name = $name;
$obj_person->age =
$age;
$obj_person->height = $height;
return
$obj_person;
}
}
$obj_person = new Person();
$class_data = $obj_person->getInstance("陈彬", 100, 171);
var_dump($class_data);
?>
PHP 类名规范 一般为类名.class.php
Person.class.php
内存分析:
堆内存:放对象的东西
栈内存:放基本数据类型(若是基本数据类型属于某个对象,那么应该也放在堆内存)
函数开启,开辟新栈内存 函数调用完毕 立即回收内存
静态内存:静态
常量内存:常量
代码内存:代码指令
---------------------------
===========================
---------------------------
//关于内存的划分,堆内存,栈内存,常量内存,静态数据内存,代码内存
// question :调用函数传入对象 和基本数据类型
传入的到底是内存地址,还是值
$obj = new Person();
function for_obj($obj){
$obj->name =
"chenbin";
}
for_obj($obj);
var_dump($obj);
//当传入对象的时候,传入的是对象的内存地址,所以我们通过地址找到空间,对值做修改。
//所以传对象
实际传的是对象的内存地址
$bin_a = 1;
function
for_comm($bin_a){
$bin_a =
3;
print_r("===");
}
for_comm($bin_a);
var_dump($bin_a);
//当传入的基础数据类型
实际上传入的是值,因为我们无法找到空间,对值进行修改。
$arr_a = array(1,2,3,4);
function
for_arr(&$arr_a){
$arr_a[3] = 100;
}
function
for_arr_1($arr_a){
$arr_a[3] = 100;
}
for_arr_1($arr_a);
var_dump($arr_a);
for_arr($arr_a);
var_dump($arr_a);
//数组传参数,默认情况下是传的值而不是地址
//注意
*/
//在类中,函数中若要引用函数外部的变量,需要用$this->xx
而不能直接用$变量名称
class Pig{
public $weight;
function
weightAdd($num){
//$weight = $weight+$num;
$this->weight =
$this->weight+$num;
}
}
$pig = new
Pig();
$pig->weightAdd(4);
var_dump($pig->weight);
?>
====================================
------------------------------------
====================================
PHP构造方法
class Mobile{
public function __construct(){
echo
$this->color;
}
//这说明构造函数是对象创建后才调用的
public $color =
"black";
//PHP5 以下是这么的写法
public function Mobile(){
echo
$this->color;
echo "-----";
}
}
$mobile = new Mobile();
PHP析构函数
definition:在某个对象的所有引用都被删除或者对象被显式销毁的时候执行
主要用来释放资源 比如关闭数据库链接
析构函数调用的顺序先创建的对象 后被销毁
栈 是先进后出
析构函数被调用的时候:
A 当程序退出时
B 当对象成为垃圾对象的时候,该对象立刻调用该对象的析构函数
//php 析构函数
class ball{
public $name;
public function
__construct($name){
$this->name = $name;
}
public function
__destruct(){
echo $this->name."删除中\n";
}
}
$c1 = new ball("111");
$c1 = null;//A 当程序退出时 B
当对象成为垃圾对象的时候,该对象立刻调用析构函数
$c2 = new ball("222");
$c3 = new ball("333");
//析构函数执行的顺序 倒过来了和new处对象的引用存在栈内存中有关系,因为栈是先入后出
//PHP 静态变量
*/
//静态变量在类中用self::变量名
用$this->变量名不行,因为静态变量是属于类的而不是对象,所以用this当前对象去调用这是不合适的
/* class
Cat{
public static $a = 0;
public function
__construct($num){
self::$a += $num;
}
}
$a_1 = new
Cat(12);
$a_2 = new Cat(12);
var_dump($a_2::$a); */
PHP静态方法
//静态方法
class Static_study{
public $a = 4;
public
static $b = 5;
private static $c = 6;
protected static $d =
7;
public static function test(){
//echo $this->a;
//静态方法中不能引用非静态成员变量
echo self::$b."\r";
}
public function
__construct(){
Static_study::test();
self::test();
//self::
能获得类内部任何修饰符的变量
//Static_study::能获得类内部任何修饰符的变量
}
}
$study_study = new Static_study();
$study_study->test();
$study_study::test();
Static_study::test();
//$study_study->无法获取private
和 protected 的静态变量和数据
//$study_study::无法获取private 和 protected
的静态变量和数据
//Static_study:: 无法获取private 和 protected
的静态变量和数据
//类外部调用类内部静态变量和静态函数 都可用上面三种方式
//var_dump($this->$a); 这样式行不通的
原文地址:http://www.cnblogs.com/bin-pureLife/p/3777178.html