=>,->,: :,self用法简介

转载 2018年04月17日 15:42:18


数组中 用于数组的 key 和 value之间的关系
例如:
$a = array(
  '0' => '1',
  '2' => '4',
);

echo $a['0'];
echo $a['2'];


-> 
类中 用于引用类实例的方法和属性
例如:
class Test{
    function add(){return $this->var++;}
    var $var = 0;
}

$a = new Test; //实例化对象名称
echo $a->add();
echo $a->var;


::
类中 静态方法和静态属性的引用方法
例如
class Test{
    public static function test(){
    public static $test = 1;
   }
}

类的静态方法和静态属性可以不用实例化对象直接使用(使用的方式是 类名::静态方法名 )

Test::test(); 调用静态方法test
Test::$test;  来取得$test静态属性的值

注:
静态方法在读到这个类或者引入这个类文件的时候,就已经实例化并存放到内存中了,非静态类则需要new一下。
静态类在内存中即使有多个实例,静态的属性也只有一份。


==== selef=== $this ======

self是引用静态类的类名,而$this是引用非静态类的实例名

static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。
因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。

static的属性,在内存中只有一份,为所有的实例共用。

使用self:: 关键字访问当前类的静态成员。

一个类的所有实例,共用类中的静态属性。

也就是说,在内存中即使有多个实例,静态的属性也只有一份。

下面例子中的设置了一个计数器$count属性,设置private 和 static 修饰。
这样,外界并不能直接访问$count属性。而程序运行的结果我们也看到多个实例在使用同一个静态的$count 属性。
<?php    
class user  
{    
   private static $count = 0 ; //记录所有用户的登录情况.    
   public function __construct() {    
       self::$count = self::$count + 1;    
   }    
   public function getCount() {      
       return self::$count;    
   }    
   public function __destruct() {    
       self::$count = self::$count - 1;    
   }    
}    
$user1 = new user();    
$user2 = new user();    
$user3 = new user();    
echo "now here have " . $user1->getCount() . " user";    
echo "<br />";    
unset($user3);    
echo "now here have " . $user1->getCount() . " user";    
?>    

静态属性直接调用
静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用。

使用的方式是: 类名::静态属性名

<?php    
class Math  
{    
   public static $pi = 3.14;    
}    
// 求一个半径3的园的面积。    
$r = 3;    
echo "半径是 $r 的面积是<br />";    
echo Math::$pi * $r * $r;    
echo "<br /><br />";    
//这里我觉得 3.14 不够精确,我把它设置的更精确。    
Math::$pi = 3.141592653589793;    
echo "半径是 $r 的面积是<br />";    
echo Math::$pi * $r * $r;      
?>    
=> 
数组中 用于数组的 key 和 value之间的关系
例如:
$a = array(
  '0' => '1',
  '2' => '4',
);

echo $a['0'];
echo $a['2'];


-> 
类中 用于引用类实例的方法和属性
例如:
class Test{
    function add(){return $this->var++;}
    var $var = 0;
}

$a = new Test; //实例化对象名称
echo $a->add();
echo $a->var;


::
类中 静态方法和静态属性的引用方法
例如
class Test{
    public static function test(){
    public static $test = 1;
   }
}

类的静态方法和静态属性可以不用实例化对象直接使用(使用的方式是 类名::静态方法名 )

Test::test(); 调用静态方法test
Test::$test;  来取得$test静态属性的值

注:
静态方法在读到这个类或者引入这个类文件的时候,就已经实例化并存放到内存中了,非静态类则需要new一下。
静态类在内存中即使有多个实例,静态的属性也只有一份。


==== selef=== $this ======

self是引用静态类的类名,而$this是引用非静态类的实例名

static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。
因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。

static的属性,在内存中只有一份,为所有的实例共用。

使用self:: 关键字访问当前类的静态成员。

一个类的所有实例,共用类中的静态属性。

也就是说,在内存中即使有多个实例,静态的属性也只有一份。

下面例子中的设置了一个计数器$count属性,设置private 和 static 修饰。
这样,外界并不能直接访问$count属性。而程序运行的结果我们也看到多个实例在使用同一个静态的$count 属性。
<?php    
class user  
{    
   private static $count = 0 ; //记录所有用户的登录情况.    
   public function __construct() {    
       self::$count = self::$count + 1;    
   }    
   public function getCount() {      
       return self::$count;    
   }    
   public function __destruct() {    
       self::$count = self::$count - 1;    
   }    
}    
$user1 = new user();    
$user2 = new user();    
$user3 = new user();    
echo "now here have " . $user1->getCount() . " user";    
echo "<br />";    
unset($user3);    
echo "now here have " . $user1->getCount() . " user";    
?>    

静态属性直接调用
静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用。

使用的方式是: 类名::静态属性名

<?php    
class Math  
{    
   public static $pi = 3.14;    
}    
// 求一个半径3的园的面积。    
$r = 3;    
echo "半径是 $r 的面积是<br />";    
echo Math::$pi * $r * $r;    
echo "<br /><br />";    
//这里我觉得 3.14 不够精确,我把它设置的更精确。    
Math::$pi = 3.141592653589793;    
echo "半径是 $r 的面积是<br />";    
echo Math::$pi * $r * $r;      
?>    

深度卷积神经网络及其在语音中的基本用法

人工智能在线技术峰会是CSDN倾力打造、旨在为领域内技术爱好者了解国内外相关公司及科研机构最新研发动态和应用案例实践分享的课堂。课程邀请一线公司技术骨干做深度解读。本期我们邀请了阿里巴巴、思必驰、第四范式、一点资讯、58集团、PercepIn等在人工智能领域技术领先公司的核心研发成员,在人脸识别、卷积神经网络、大规模分布式机器学习系统搭建、推荐系统等话题分享他们的心得和经验。
  • 2017年05月15日 17:14

self的用法与意义(一)

在烧掉脑子前,先温习一下最最基本的,self的意义。 如何理解class中的self ? 一般self作为第一个参数,但在SocketServer源代码中,居然有self作为最后一个参数的情况,如: ...
  • Trofish
  • Trofish
  • 2016-11-28 16:35:13
  • 186

1.property之 self.xx与_xx的区别

关于self.xx和_xx, 是同一个指针,只是前者调用该类的setter或getter方法,后者直接获取自己的实例变量。即这个问题也就演变成了属性(property)和实例变量(instance v...
  • wangyanchang21
  • wangyanchang21
  • 2016-01-29 15:40:47
  • 658

ios中self的用法

最近有人问我关于什么时候用self.赋值的问题, 我总结了一下, 发出来给大家参考. 有什么问题请大家斧正.     关于什么时间用self. , 其实是和Obj-c的存取方法有关, 不过网上很多人...
  • zhibudefeng
  • zhibudefeng
  • 2012-07-04 13:11:56
  • 8204

self

据目前了解,self几乎等同于this是一个指针,指向当前对象本身。在调用函数进行传参时需要用到,不过一般都默认省略。在java中,类中的方法不需要加this;在python中,类中的方法需要加sel...
  • u014588342
  • u014588342
  • 2018-03-10 11:24:03
  • 5

self 和 super

关于 self 和 super 在oc 中 的疑惑 与 分析   这个问题貌似很初级,但很容易让人忽略,me too 。直到在一次面试时被问到,稀里糊涂的回答了下。实在惭愧, 面...
  • dingqinghui
  • dingqinghui
  • 2016-07-14 19:06:12
  • 88

关于self.与_的区别

很多时候我们可以看到在xcode的.m开发文档中有self.aa与_aa字段,一直不太明白这其中的区别,和相关的用法,知道写一个东西,调bug的时候顿悟,现在记录下来,仅供参考! 很多时候我...
  • jie863230900
  • jie863230900
  • 2015-07-22 13:56:34
  • 1530

self详解

1、self:是指针,指向调用此方法的当前对象/类。即是谁调用的这个方法,self就指向谁。如果是类调用的这个方法(此方法必须是类方法/静态方法),self就指向类;如果是对象调用的这个方法(实例方法...
  • u013087513
  • u013087513
  • 2015-08-15 09:04:40
  • 390

自身类型(self type)

看scala的源码的话很发现很多源码开头都有一句:self => 这句相当于给this起了一个别名为selfclass Self { self => //代表this指针 ,也就是说 s...
  • pzw_0612
  • pzw_0612
  • 2015-07-18 15:16:44
  • 1219

OC之self详解

self是一个指针,用在方法中时,哪个对象调用该方法self指针就指向哪个对象,可以把它当作调用该方法的那个对象的指针一样使用。 #import /*  self的用途:  (1)谁调用了当前...
  • u013378266
  • u013378266
  • 2015-08-31 14:39:08
  • 688
收藏助手
不良信息举报
您举报文章:=>,->,: :,self用法简介
举报原因:
原因补充:

(最多只允许输入30个字)