[PHP] class内部の変数と関数へのアクセスロジック

chalk-drawing-381126_1280
LINEで送る
Share on GREE
Share on LinkedIn

PHPのclassで外部アクセスを禁止するようなセキュアな構造を作って、脆弱性対応を行う場合は、非常にしっかりした構造をしなければいけませんが、基本的にpublicでOKというような構成の場合は、できるだけアクセスしやすいような構造にする必要があります。

同じclass内で変数参照したい場合、$thisを使う時とself::とする場合で、制限が違うようなので、少し調べてみました。

また、別classや、classの外部から参照する場合などの設計時に気をつけなければいけない点を調査しておきました。
wordpressやPHPの独自フレームワーク構築の際に役立ててください。

Class内部での変数参照

【注意!】self::でstatic以外にアクセスすると、PHPがErrorで停止してしまうので、コメントアウトしてます。
$thisの場合は、アクセスできなくてもwarningレベルみたいです。

結果

class内でself::アクセスする場合は、staticがついていないとダメなんですね。
逆に$thisアクセスはstaticがついているとダメという非常に面倒くさい感じです。
以下のようにマトリクスにしておきます。

Class内の変数アクセス
$this self::
public
static
public static
var

Class外部からのアクセス(変数)

結果

内部と同じなので想定通りの結果ですね。
new宣言するしないのパターンを追加してみましたが、ここでの差分はなさそうです。

Class外からの変数アクセス
$foo-> $foo:: Foo::
public
static
public static
var

Class外部からのアクセス(関数)

結果

外部からのアクセスは、どのパターンにもアクセスできるようです。
変数と同じになるようにイメージしてたんですが、扱いが違うのが少し戸惑いますね。

Class外からの関数アクセス
$foo-> $foo:: Foo::
function
public
static
public static

Class外部からの関数アクセスして、変数を返す

結果

function事態のアクセスは上記検証で問題ないはずなのですが、内部変数にアクセスする箇所でトラブルが発生するようだ。
問題なくアクセスできたのは、結果の通りなので、内部変数へのアクセスは不具合の元になる可能性が高いですね。

Class外からの関数経由での変数アクセス ($foo->**)
変数 / 関数 function public static public static
public
static
public static
var

今後もう少し調べてみたいと思います。
今回はこの辺まで。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*