面向对象 - 方法

  • 作者:KK

  • 发表日期:2017.02.14


方法的学习思路跟属性差不多

方法的声明

类里面有一种叫方法(method)的元素:

class User{

	public function sayName(){
		echo 'Hey I am Tony!';
	}
	
}

现在类里就声明了一个方法,方法名称叫sayName

声明方法就像声明函数一样,只是在function关键词的前面再加个public这样而已,如果是旧版的PHP甚至连public都可以不需要:

class User{

	function sayName(){
		echo 'Hey I am Tony!';
	}
	
}

方法的调用

声明了方法后,并不是让它摆着装饰的,而是可以拿来用的,接下来看看怎么调用:

$user = new User();
$user->sayName(); // Hey I am Tony!

方法可以有返回值,其实就像函数一样

class User{

	public function getName(){
		return 'Tony';
	}
	
}

$user = new User();
$name = $user->getName();
echo $name; //Tony

可以声明多个方法

和属性一样,多复制几个命名不同就行:

class User{

	public function getName(){
		return 'Tony';
	}

	public function getAge(){
		return 18 - 2;
	}
	
}

多个方法之间可以互相调用

class User{

	public function getAge(){
		return 18 - 2;
	}

	public function 是否成年(){
		$age = $this->getAge(); // $this 就是指自己这个类,调用自己的getAge方法
		return $age >= 18;
	}
	
}

$user = new User();
var_dump($user->是否成年// false

方法也可以调用属性

class User{
	public $age = 0;

	public function 是否成年(){
		$age = $this->age; // 获取自己的age属性
		return $age >= 18;
	}
	
}

$user = new User();
var_dump($user->是否成年// false

$user->age = 19;
var_dump($user->是否成年// true

应用例子

为免出现“学了类、属性、方法”后都不知有啥用的心理,这里弄一个例子给大家参考一下

下面是一个叫做HttpRequest的类,用于获取指定网址的HTML源代码

class HttpRequest{
	//请求地址
	public $url = '';
	
	//请求后的结果内容
	public $content = '';
	
	public function get(){
		$curlHandler = curl_init(); //初始化一个curl句柄
		curl_setopt($curlHandler, CURLOPT_URL, $this->url); //设置请求网址
		curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1); //后面执行exec的时候要返回内容,不要自动输出
		$this->content = curl_exec($curlHandler); //执行并获取HTML文档内容
		return $this->content;
	}
}

$request1 = new HttpRequest();
$request1->url = 'http://www.kkh86.com/it/index.html';
$content1 = $request1->get();
file_put_contents('kk-index.html', $content1);

$request2 = new HttpRequest();
$request2->url = 'http://www.baidu.com';
$content2 = $request2->get();
file_put_contents('baidu-index.html', $content2);

var_dump([
	$request1->content,
	$request2->content,
]);

以上$request1和$request2是两个不同的对象,各自请求不同的网址内容

就像jQuery和JS里各个DOM对象都不相同一样,各自有各自的find范围,各自找各自的parent、children