PHP中拜访类中静态对象 静态方法的成员方法

博客分类:
类里写个静态方法,用来返回$a实例,随处调用
class instance{
&&&& private static $a;
&&&& static function getA(){
&&&&&&&&&&&& if(!self::$a){
&&&&&&&&&&&&&&&&&& self::$a = new a();
&&&&&&&&&& }
&&&&&&&&&& return self::$a;
&&& }
}
class a{
&&&&&& function ita(){
&&&&&&&&& echo 'ita function';
}
}
class b{
&&&&& function itb(){
&&&& //在这里取得a的单例,不会出现多次实例化的现象
&&& $a=instance::getA();&&&
&&&& $a-&ita();
}
浏览: 10520 次
来自: 上海
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'使各对象不需要显式地相互引用从而使其耦合松散, 用一个中介对象来封装一系列的对象交互, 而且可以独立地改变它们之间的交互...
php面向对象中static静态属性和静态方法的调用
这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。实例:
header("content-type:text/charset=utf-8");
class Human{
static public $name = "小妹";
public $height = 180;
static public function tell(){
echo self::$//静态方法调用静态属性,使用self关键词
//echo $this-&//错。静态方法不能调用非静态属性
//因为 $this代表实例化对象,而这里是类,不知道 $this 代表哪个对象
public function say(){
echo self::$name . "我说话了";
//普通方法调用静态属性,同样使用self关键词
echo $this-&
$p1 = new Human();
$p1-&say();
$p1-&tell();//对象可以访问静态方法
echo $p1::$//对象访问静态属性。不能这么访问$p1-&name
//因为静态属性的内存位置不在对象里
Human::say();//错。say()方法有$this时出错;没有$this时能出结果
//但php5.4以上会提示
(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)、静态方法不需要实例化即可调用。同上
(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;
希望本文所述对大家的php程序设计有所帮助。
以上就介绍了 php面向对象中static静态属性和静态方法的调用,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
没有更多推荐了,PHP类成员类型、访问方式和权限 | Rming
Please click
if you are not redirected within a few seconds.
PHP类中成员类型普通成员(var)php类的静态成员(static)类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关。他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据,静态成员包括静态方法和静态属性。静态属性包含在类中要封装的数据,可以由所有类的实例共享。实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量。我们在下例中使用了一个静态属性Counter::$count。它属于Counter类,而不属于任何Counter的实例。你不能用this来引用它,但可以用self或其它有效的命名表达。在例子中,getCount方法返回self::$count,而不是Counter::$count。php类的常量成员(constant)在类中可以定义常量(constant),用来表示不会改变的值。我们使用const定义一个常量,定义的这个常量不能被改变。在PHP5中const定义的常量与定义变量的方法不同,不需要加$ 修饰符。 const PI = 3.14; 这样就可以。而使用const 定义的常量名称一般都大写,这是一个约定,在任何语言中都是这样。如果定义的常量由多个单词组成,使用下划线"_"连接,这也是约定。对于从该类实例化的任何对象来说,常量值在这些对象中的整个生命周期中都保持不变。 PHP类成员的访问方式和权限像C++和Java一样,PHP有三种访问方式:public,private和protected. 对于一个类成员的访问方式,可以是其中之一. 如果你没有指明访问方式,默认地访问方式为public. 你也可以为静态成员指明一种访问方式,将访问方式放在static关键字之前(如public static).Public成员Public成员可以被毫无限制地访问.类外部的任何代码都可以读写public属性. 你可以从脚本的任何地方调用一个public方法. 在PHP的前几个版本中,所有方法和属性都是public, 这让人觉得对象就像是结构精巧的数组.Private(私有)成员Private(私有)成员只在类的内部可见. 你不能在一个private属性所在的类方法之外改变或读取它的值. 同样地,只有在同一个类中的方法可以调用一个private方法. 继承的子类也不能访问父类中的private 成员.要注意,类中的任何成员和类的实例都可以访问private成员. 看例子6.8,equals方法将两个widget进行比较.==运算符比较同一个类的两个对象,但这个例子中每个对象实例都有唯一的ID.equals 方法只比较name和price. 注意equals方法如何访问另一个Widget实例的private属性. Java和C都允许这样的操作.class Widget
public function __construct($name, $price)
$this-&name = $
$this-&price = floatval($price);
$this-&id = uniqid();
//checks if two widgets are the same 检查两个widget是否相同
public function equals($widget)
return(($this-&name == $widget-&name)AND
($this-&price == $widget-&price));
$w1 = new Widget('Cog', 5.00);
$w2 = new Widget('Cog', 5.00);
$w3 = new Widget('Gear', 7.00);
if($w1-&equals($w2))
print("w1 and w2 are the same\n");
if($w1-&equals($w3))
print("w1 and w3 are the same\n");
//FALSE, == includes id in comparison
if($w1 == $w2) //不等,因为ID不同
print("w1 and w2 are the same\n");
如果你对面向对象编程不熟悉,你可能想知道用private成员的目的是什么. 你可以回忆一下封装和耦合的想法,这在本章开头我们有讨论过. Private成员有助于封装数据. 他们可以隐藏在一个类内部而不被类外部的代码接触到. 同时他们还有助于实现松散的耦合. 如果数据结构外的代码不能直接访问内部属性,那么就不会产生一个隐性的关联性.当然,大部分private属性仍然可以被外部代码共享. 解决方法是用一对public方法,一个是get(获取属性的值),另一个是set(设置属性的值). 构造函数也接受属性的初始值. 这使得成员间的交流通过一个狭窄的,经过良好限定的接口来进行. 这也提供改变传递给方法的值的机会. 注意在例子6.8中,构造函数如何强制使price成为一个float数(floadval()).Protected(受保护的) 成员Protected(受保护的) 成员能被同个类中的所有方法和继承出的类的中所有方法访问到. Public属性有违封装的精神,因为它们允许子类依赖于一个特定的属性来书写.protected方法则不会带来这方面的担忧.一个使用 protected方法的子类需要很清楚它的父类的结构才行.注意Widget现在有一个叫作getName的protected方法. 如果Widget的实例试图调用protected方法将会出错: $w1-&getName()产生了一个错误. 但子类Thing中的getName方法可以调用这个protected方法.当然对于证明Widget::getName方法是protected,这个例子显得过于简单. 在实际情况下,使用protected方法要依赖于对对象的内部结构的理解.class Widget
public function __construct($name, $price)
$this-&name = $
$this-&price = floatval($price);
$this-&id = uniqid();
//checks if two widgets are the same
public function equals($widget)
return(($this-&name == $widget-&name)AND
($this-&price == $widget-&price));
protected function getName()
return($this-&name);
class Thing extends Widget
public function setColor($color)
$this-&color = $
public function getColor()
return($this-&color);
public function getName()
return(parent::getName());
$w1 = new Widget('Cog', 5.00);
$w2 = new Thing('Cog', 5.00);
$w2-&setColor('Yellow');
//TRUE (still!) 结果仍然为真
if($w1-&equals($w2))
print("w1 and w2 are the same\n");
//print Cog 输出 Cog
print($w2-&getName());
一个子类可能改变通过覆写父类方法来改变方法的访问方式,尽管如此,仍然有一些限制. 如果你覆写了一个public类成员,他子类中必须保持public. 如果你覆写了一个protected成员,它可保持protected或变成public.Private成员仍然只在当前类中可见. 声明一个与父类的private成员同名的成员将简单地在当前类中建立一个与原来不同的成员. 因此,在技术上你不能覆写一个private成员.不可覆写的final方法Final关键字是限制访问成员方法的另一个方法. 子类不能覆写父类中标识为final的方法. Final关键字不能用于属性.PHP静态方法使用的问题;静态方法如何在class内调用变量? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。3被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答brainbell.com/tutorials/php/Static_Methods.html对于类的成员变量和方法: 1.如果一个被引用的变量或方法定义时使用了static或const,那么必须使用::访问。 2.如果一个被引用的变量或方法定义时没有使用static或const,那么必须使用-&访问。 3.如果要访问一个被static或const修饰的变量或方法,那么必须使用self访问。 4.如果要访问一个没有被static或const修饰的变量或方法,那么必须使用$this访问。 题主的需求是要在static修饰的方法中访问非static修饰的成员变量,可以做如下分析: Static修饰的方法必须使用self::staticMethod(),而访问非static修饰的成员变量必须使用$this-&var,而在静态方法中是无法使用$this的,所以要想实现题主的需求,可以考虑把self::afee+=$ifee放到construct中,然后省去enterSchool()方法。1添加评论分享收藏感谢收起你是要统计总人数吧?
class student{
public $//学生姓名
public $//学生学号
public static $afee = 0;//总人数,初始为0
function __construct(){
public function enterschool($name, $ifee){
$this-&name=$
$this-&ifee=$
# 调一次就使人数加1
student::$afee = student::$afee +1;
/****************************************/
$stuarr1=array("一号学生",99);
$stu=new student();
//既然是实例化调用上面就不需要定义静态方法了
$stu-&enterschool($stuarr1[0], $stuarr1[1]);
echo $stu-&name.':'.$stu-&ifee."&br/&";
$stuarr2=array("二号学生",88);
$stu-&enterschool($stuarr2[0], $stuarr2[1]);
echo $stu-&name.':'.$stu-&ifee."&br/&";
echo '总数:'.student::$
添加评论分享收藏感谢收起写回答PHP中,怎么在成员函数当中调用自己的成员属性?除了静态调用之外还有别的方法吗?_百度知道
PHP中,怎么在成员函数当中调用自己的成员属性?除了静态调用之外还有别的方法吗?
我有更好的答案
class&Test&{&&&&public&$name&=&&#39;Tom&#39;;&&&&public&function&index&()&{&&&&&&&&return&$this&-&&&&&&}&&&&}$var&=&new&Tvar_dump(&&&&$var&-&&index());
采纳率:83%
来自团队:
 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。  如 Box∷volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已。 静态成员函数的作用是为了能处理静态数据成员。 可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。  由此决定了静态成员函数不能访问本类中的非静态成员。 在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句: cout&&height&& //若height已声明为static,则引用本类中的静态成员,合法 cout&&width&& //若width是非静态数据成员,不合法。但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如 cout&&a.width&& //引用本类对象a中的非静态成员
本回答被网友采纳
有的,在成员函数里面用$this调用成员属性,function里面应该是echo $this-&
一般用$this-&
其他1条回答
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 静态对象 静态方法 的文章

 

随机推荐