7

私は、hacklang に取り掛かるために新しいプロジェクトを開始することに決めました。PHP の習慣から移行する際に最初に遭遇した問題をいくつか修正した後、次のエラーに遭遇しました。

Unbound name: str_replace
Unbound name: empty

いくつかの調査を行ったところ、これは型チェックされていない「レガシー」php を使用しているためであり、//strict.

それは問題ありません。empty()交換するのは簡単でしたstr_replace()が、少し難しいです。

//strict?または少なくとも同様のもので動作する同等の機能はありますか。

使用できることは承知しています//declが、私の場合、それは目的に反しているように感じます。

ハックで実装されている関数と、ドキュメントにない関数を見つける方法は少なくともありますか?

参考までに(質問自体にはあまり関係ありませんが)、コードは次のとおりです。

<?hh //strict
class HackMarkdown {
    public function parse(string $content) : string {
        if($content===null){ 
            throw new RuntimeException('Empty Content');
        }
        $prepared = $this->prepare($content);

    }
    private function prepare(string $contentpre) : Vector<string>{
        $contentpre = str_replace(array("\r\n","\r"),"\n",$contentpre);

        //probably need more in here
        $prepared = Vector::fromArray(explode($contentpre,"\n"));
        //and here
        return $prepared;
    }
}
4

1 に答える 1

5

コードをまったく変更する必要はありません。Hack ツールにすべての組み込み PHP 関数を伝える必要があるだけです。

これを行う最も簡単な方法は、このフォルダーをダウンロードしてプロジェクトのどこかに置くことです。プロジェクトのベースにある hhi フォルダーに入れました。そこにあるファイルは、すべての組み込み PHP 関数について Hack に伝えます。

それらのほとんどには型ヒントがありません。これにより、すべての戻り値の型が実際の戻り値の代わりにあると Hack が考える可能性があります。たとえば、 aまたは aを返すことができるmixedため、ほとんどの場合、これは実際には正しいです。ただし、「バインドされていない名前」エラーは停止します。これが、エラーを追加する主な理由です。str_replacestringbool

于 2014-03-30T10:18:30.380 に答える