2017-10-06 20 views
1

オブジェクト指向のワードプレスプロジェクトで使用しているレガシーコードのいくつかをリファクタリングする必要があります。コードの重複が多い領域の1つは、setTitle関数内でページのタイトルを設定するときです(下の図を参照)。PHPのネストされた関数と同等のもの

入れ子関数はPHPでは動作しないようです。しかし、それがうまくいくと仮定すると、以下のコードは、私がしようとしていることを達成するはずです。

setTitle関数では、文字列を取り込んで何らかの形でコードを実行し、渡された文字列でadd_filterを正常に呼び出すだけで、タイトルが正しく設定されます。これを達成する最良の方法は何でしょうか?

MyControllerClass.php

public function setTitle($title) { 
    function t($t) { 
    $t['title'] = $title; return $t; 
    } 
    add_filter('document_title_parts', 't'); 
    return $this; 
} 

その後、後で別のクラスで..

$controller->setTitle('My Homepage')->renderHomePage();

+0

あり、PHPでのネストされた関数のようなものがのsetTitle()が呼び出された場合にのみ定義される関数t()は単に何を持っている....ではありませんが、それ以外の場合は、と絶対に何も共有しませんsetTitle()、可変スコープ、無し –

答えて

1

あなたはuse文で無名関数を使用することができます。 http://php.net/manual/en/functions.anonymous.php#functions.anonymous

これを試してください。

public function setTitle($title) { 
    add_filter('document_title_parts', function ($t) use ($title) { 
    $t['title'] = $title; return $t; 
    }); 
    return $this; 
} 
+0

返事をありがとう。私はすでにそれを試しました、$ titleは未定義です。 – AnchovyLegend

+3

さて、皆さんは 'use($ title)'が不足しているので、もちろんそれは未定義です。いいえ、なぜかdownvote tho。 – Mjh

+1

@AnchovyLegend彼らは私が使用を忘れてしまったと言いました。今すぐお試しください – bassxzero

関連する問題