2011-12-30 6 views
2

私はそれを説明する良い方法を考えることができないので、タイトルが少し混乱していることを知っています。私はへのアクセスを持っていないと、それは次のようになります。この機能があります:PHP:画面に関数のエコーが表示されるのを防ぐことができますか?

<?php function myFunction() { 
?> '<img src="one.jpg" />'; 
<?php } ?> 

[OK]をので、毎回その関数が呼び出されると、それはエコーimgタグです。しかし、画面にエコーする前にimgタグを操作したいのですが?出来ますか?

私は、最初の変数に代入し、それを操作したいし、私はそれをエコーし​​ます。このようなもの:

$image_src = myFunction(); 
$image_src = preg_replace('/s.*"/', $image_src); 
echo $image_src; 

何かこれは可能ですか?

答えて

9

使用output buffering:その後

ob_start(); 
myFunction(); 
$output = ob_get_clean(); 

、$出力は、関数の内部で反響されたHTMLが含まれています。

+0

も ​​'ob_get_contentsを()'確認し、返信用の 'のob_start()' – ZJR

+0

おかげへのコールバックの引数を与えたときに何が起こるが、出力が唯一の方法をバッファリングしていますか? –

+0

@Rickはい、関数にアクセスすることはできません(したがって、エコーを返すように変更することはできません)ので、唯一の方法です。 – Paulpro

1

私はPHPに新しいですし、私がした最初のものはHTMLにラインをエコーする汎用的な関数を作成しました。その後、私は例えば、htmlタグを追加し、簡単な段落や画像のための関数を作っ

function html_line ($string) // echo line to browser 
{ 
    echo PHP_EOL . $string . PHP_EOL; 
} 

function html_page ($str_title, $str_content) // simple page with title and body 
{ 
    html_line ('<html>'); 
    html_line ('<head>'); 
    html_line ('<title>' . $str_title . '</title>'); 
    html_line ('</head>'); 
    html_line ('<body>'); 
    html_pp ($str_content); 
    html_line ('</body>'); 
    html_line ('</html>'); 
} 

function html_test() // set some variables and create a test page 
{ 
    $test_title = 'PHP Test'; 
    $test_msg = 'Hello World!'; 
    html_page ($test_title, $test_msg); 
} 

function html_pp ($string) // echo paragraph to browser 
{ 
    html_line ('<p>' . $string . '</p>'); 
} 

他の関数と変数を使用すると、これらと呼ばれる前に、希望する任意の方法コンテンツを操作するために使用することができます210

これがあなたの質問に答えるかどうか分かりませんが、それは私にとってはうまくいっていて、良い出発点になるかもしれません。関数を別のファイルに分割する場合は、正しいインクルード呼び出しがあることを確認しただけで、関数は呼び出し元からグローバルスコープを持ちます。

関連する問題