2017-11-20 8 views
3

内部関数/メソッドなどを使用してループを壊すことはできますか?私はこの部分を利用したいと思いループを他の関数/メソッド/何かから壊していますか?

do { 
    $page = $this->get_page($this->profile_link . '&page=' . $page_count); 

    if ($this->pageNotExists($page, 'has no public')) { 
     break; 
    } 

    $links = array_merge($links, $this->get_videos_from_given_page($page)); 

    $page_count++; 
} while (1); 

は、このコード想定

if ($this->pageNotExists($page, 'has no public')) { 
    break; 
} 

をそしてここで休憩をします。この再利用可能なメソッド/関数か何かから作ります。

私はこのコード部分をここに入れるのが嫌いです。

そして私はコードの同じ部分を使用する他の方法があります。それはコードの複製であり、私はそれを好きではありません。

だから、関数/メソッドか何かにこのコードを抽出し、まだ同じ結果を有し、かつ、すべてが同じように機能する持ちながらここから出

if ($this->pageNotExists($page, 'has no public')) { 
    break; 
} 

をそれを取ることは可能ですか?

+2

ありませんが、それはとにかく必要はいないようです:私が正しくあなたのコードを読む場合は、ページを取得し、それが存在するかどうかを確認してみてください。ページを取得し、 'false' /' null'を返すときは、そうしなければなりません。または、必要なページだけを返す別のメソッドを追加します。そして、あなたは単に 'while($ page = ...')を使うことができます。 – jeroen

+0

@jeroenそれはそれに関するものではなく、存在するページのテキストをチェックします。 –

答えて

-1

プログラムの外側にあるbreak文(たとえば、制御ループ内にない)は、スクリプトを終了します。これは、文の場合、私が誤ってで休憩していたとき、私を捕まえ

すなわち

<?php 
echo "hello"; 
if (true) break; 
echo " world"; 
?> 

のみ、直接あなたが求めているものを達成する方法はありません

-1

「こんにちは」と表示されます。コードの流れは明確でなければなりません。関数が例外をスローしない限り、関数はそれを中断できません。

ロジックをループ状態に直接移動したい場合があります。などのように定義されているgetPageByPageCount

while ($page = $this->getPageByPageCount($page_count)) { 
    ... 
} 

private function getPageByPageCount($page_count) { 
    $page = $this->get_page($this->profile_link . '&page=' . $page_count); 
    if (!pageCheck($page)) { 
     return null; 
    } 
    return $page; 
} 
関連する問題