php类名和方法名重名时发生了什么?

简介
本文主要罗列些例子,看看当php类名和函数名重名时,php是如何处理的
例子
<?php

class TestObject
{
    public $subject;
    private $message = 'test' . PHP_EOL;

    public function testObject()
    {
        echo $this->message;
    }
}

$instance = new TestObject();
$instance->testobject();
输出
php test1.php 
test
test
原因?
在php4时,构造函数用的是与类同名的函数来进行构造这个动作,且由于类名和方法不区分大小写。 所以在上述例子中,构造函数执行了一个echo, 方法也被执行了一次。故有两个test输出。 下面我们通过例举各种组合,来体验一下效果。
只有一个构造函数
<?php

class TestObject
{
    public $subject;
    private $message = 'test' . PHP_EOL;

    public function testObject()
    {
        echo $this->message;
    }
}

$instance = new TestObject();
//$instance->testobject();
  • 输出
php test2.php
test
一次输出
指定2个方法时
<?php

class Test_Object
{
    public $subject = 'subject' . PHP_EOL;
    private $message = 'test' . PHP_EOL;

    public function test_object()
    {
        echo $this->message;
    }

    public function test_subject()
    {
        echo $this->subject;
    }
}

$instance = new Test_Object();
$instance->test_object();
$instance->test_subject();
  • 输出
php test3.php
test
test
subject
构造函数和同名方法各输出一次,不同名方法输出一次
类名与方法名不同时
<?php

class Test_Object
{
    public $subject = 'subject' . PHP_EOL;
    private $message = 'test' . PHP_EOL;

    public function testMessage()
    {
        echo $this->message;
    }
}

$instance = new Test_Object();
$instance->testMessage();
  • 输出
php test4.php
test
不同名方法输出一次
类名和方法名一致时
<?php

class Test_Object
{
    public $subject = 'subject' . PHP_EOL;
    private $message = 'test' . PHP_EOL;

    public function test_object()
    {
        echo $this->message;
    }
}

$instance = new Test_Object();
$instance->test_object();
  • 输出
php test5.php
test
test
构造函数和同名方法各输出一次
本文源码
https://github.com/cangyan/TAV/tree/master/00023_PHP_CLASS_AND_FUNCTION

查看原文:https://www.huuinn.com/archives/556
更多技术干货:风匀坊
关注公众号:风匀坊
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值