设为首页 收藏本站
查看: 749|回复: 0

[经验分享] PHP基础之面向对象的一些概念

[复制链接]

尚未签到

发表于 2017-4-6 09:00:20 | 显示全部楼层 |阅读模式
  写PHP也已经有一段时间了,回忆之前写Java的一段经历,现归纳一些基本的概念
  1.static关键字:
  static关键字的目的是使方法或者属性名独立于类的实例,也就是说和类是同一级别的,与对象或者类本身关联。
  static修饰的方法或者属性是可以通过类名直接访问的,当然,也是可以初始化对象,通过实例来访问。
  所以static修饰的方法或者属性也叫全局变量或者方法
  2.this关键字:
  this关键字是与对象或者类的某个实例关联的
  **不能在static方法中使用this关键字
  3.self关键字:
  self关键字是指向对象或者类本身,不指向任何已经实例化的对象
  一般用来指向对象或者类中俄静态变量
  4.parent关键字:

  parent关键字即指向父类的指针
  一般用来调用父类的构造方法

<?php
class Test{
private $name = '';
private static $age = 20;
public function __construct(){
$this->name = 'test';
}
public function setName($name){
$this->name = $name;
echo $this->name;
}
public static function setAge($age){
self::$age = $age;
echo self::$age;
//$this->age = $age;                 //error Using $this not in object context
}
}
$test = new Test();
$test->setName('KingJ');                 //KingJ
echo '</br>';
$test->setAge(99);                         //99
  5.继承的调用

<?php
class A{
public function a(){
echo 'A:a';
}
}
class B extends A{
public function bb(){
$this->a();   
}
}

$test = new B();     //此刻初始化子类B的时候,由于之类没有构造方法,就调用父类的构造方法a(),此时输出A:a
$test->bb();          //在之类中可以用$this->function来调用父类的方法
  6.PHP中的引用
  php的引用就是在变量或者函数、对象等前面加上&符号
  首先我们来看一个例子:

<?php
$a = 100; //声明变量a
$b = &$a; //声明变量b,引用自变量a
echo "$a <br />";  
echo "$b <br />";
$a++; //变量a自增1
echo "$a <br />";
echo "$b <br />";//查看变量b,也增加了1,说明使用的是同一存储单元

  结果:

100
100
101
101

  php中对于地址的指向功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发
生写操作,指向同一个地址的变量或者对象是不会被拷贝的。
  php默认为传值传递:


<?php   
$a = 20;
$b = $a;
$a = $a + 10;
echo $a.' and '.$b;

  结果:

30 and 20

  要是想变为地址传递需要加&,既:

  
<?php
$a = 20;
$b = &$a;
$a = $a + 10;
echo $a.' and '.$b;

  结果:

30 and 30

   也就是说,&把$a的地址传给了$b,这样的话这两个变量现在共享一个内存的存储区域,就是说它们的值是一样的。
  同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中:

<?php
$bar =& new fooclass();
$foo =& find_var($bar)
  引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量,并且该变量在呼叫范围内引用了同一个内容来实现的。说的通俗点就是一个函数的参数是一个本地变量的引用。下面再举例说明一下:

<?php
function foo(&$val1, $val2) {
$val1 += 1;
$val2 += 1;
}
$a=5;
$b=10;
foo($a,$b);
echo $a;
echo $b;

   运行这段代码是给函数传递两个参数,一个是引用$a的内容,一个是$b的值,在执行此函数后,发现$a的内容改变了,而$b的内容则没有变化。
  PHP引用的第三个用法是引用返回,这个用法理解起来有点难度,引用返回用在当你想用函数找到引用应该被绑定在哪一个变量上面时。当返回引
用时,使用此语法:说的简单点,就还是引用函数的返回。但和参数传递不同,必须在函数定义和函数引用这两个地方都用 & 符号。下面举个例子:

<?php
function &find_var ($param)
{
/* ...code... */
return $found_var;
}
$foo =& find_var ($bar);
$foo->x = 2;

   这个例子给$foo 赋值是函数find_var的返回引用,所以在给$foo->x赋值时就是给find_var的返回引用赋值,而不是简单的赋值。
  PHP引用的最后一个用法是引用定位,主要有两个应用:一个是global 引用,当用 global $var
声明一个变量时实际上建立了一个到全局变量的引用。也就是和$var =&
$GLOBALS["var"];是一样的。另外一个是$this的用法,在一个对象的方法中,$this 永远是调用它的对象的引用。
  7.php中的global
  global $var1,$var2;


就是外部变量的同名引用,变量本身的作用范围仍然在函数体内。改变这些变量的值,外部的同名变量自然也改变。但是一旦用了&,那么变量将不再是同名引用。


$var1=1;
$var2=2;
function test()
{
global $var1,$var2;//作用范围就在函数体内
$var1=3;
}
test();
echo $var1;
  结果一定是3。因为是同名引用嘛。


$var1=1;
$var2=2;
function test()
{
global $var1,$var2;//作用范围就在函数体内
$var1=&$var2;
}
test();
echo $var1;
  结果一定是1。因为在函数内的$var1经过赋值后与$var2具有相同的引用了。

$var1=1;
$var2=2;
function test_global()
{
global $var1,$var2;
$var1=&$var2;
$var1=7;
}
test_global();
echo $var1;
echo  $var2;
  结果一定是1和7。因为在函数内的$var1与$var2具有相同的引用。因此改变$var1的值,$var2的值也作了改变。

  next to do ------------------------------------------

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-360818-1-1.html 上篇帖子: PHP基础之面向对象的一些概念 下篇帖子: PHP在变量前面加&是什么意思
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表