LoginSignup
1
1

More than 3 years have passed since last update.

PHP は組み込み関数と同名の関数・メソッドを定義できるのか

Last updated at Posted at 2019-09-14

結論から言うと、関数の場合はエラーで定義できず、メソッドの場合は定義できます。

組み込み関数の htmlspecialchars を再定義して確かめます。

関数

<?php

function htmlspecialchars($args) {
    return $args;
}

$a = '<a href="https://www.yahoo.co.jp/">zozo</a>';

echo htmlspecialchars($a);
結果
Fatal error: Cannot redeclare htmlspecialchars() in /in/r0jYu on line 3

Process exited with code 255.

再宣言できないとエラーが表示されます。

実行結果:Online PHP editor

インスタンスメソッド

<?php

class A
{
    public function htmlspecialchars($args)
    {
        return 'instance method :' . $args;
    }
}

$a = '<a href="https://www.yahoo.co.jp/">zozo</a>';
$b = new A;
echo $b->htmlspecialchars($a);
結果
instance method :<a href="https://www.yahoo.co.jp/">zozo</a>

エラーは表示されません。

実行結果:Online PHP editor

静的メソッド

<?php

class A
{
    public static function htmlspecialchars($args)
    {
        return 'static method  :' . $args;
    }
}

$a = '<a href="https://www.yahoo.co.jp/">zozo</a>';
$b = new A;
echo $b->htmlspecialchars($a);
結果
static method  :<a href="https://www.yahoo.co.jp/">zozo</a>

エラーは表示されません。

実行結果:Online PHP editor

インスタンスメソッド・静的メソッドの再定義

<?php

class A
{
    public function htmlspecialchars($args)
    {
        return 'instance method  :' . $args;
    }
    public static function htmlspecialchars($args)
    {
        return 'static method  :' . $args;
    }
}

$a = '<a href="https://www.yahoo.co.jp/">zozo</a>';
$b = new A;
echo $b->htmlspecialchars($a);
echo $b::htmlspecialchars($a);
結果
Fatal error: Cannot redeclare A::htmlspecialchars() in /in/QGdT4 on line 9

Process exited with code 255.

インスタンスメソッド・静的メソッド関係なく、一度定義したインスタンスメソッド・静的メソッドと同名のメソッドを再定義するとエラーが表示されます。

実行結果:Online PHP editor

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1