Użycie sprintf () jest znacznie czystsze i bezpieczniejsze do sformatowania łańcucha.
Na przykład, gdy masz do czynienia ze zmiennymi wejściowymi, zapobiega nieoczekiwanym niespodziankom, określając wcześniej oczekiwany format (na przykład, że oczekujesz ciągu [ %s
] lub liczby [%d
]). Może to potencjalnie pomóc w potencjalnym ryzyku wstrzyknięcia SQL , ale nie zapobiegnie, jeśli ciąg znaków będzie zawierał cudzysłowy.
Pomaga również radzić sobie z liczbami %.2f
zmiennoprzecinkowymi , możesz jawnie określić precyzję cyfr (np. ), Która oszczędza ci korzystania z funkcji konwersji.
Inną zaletą jest to, że większość głównych języków programowania ma własną implementację sprintf()
, więc kiedy się z nią zapoznasz, korzystanie z niej jest jeszcze łatwiejsze niż uczenie się nowego języka (np. Jak łączyć ciągi znaków lub konwertować zmiennoprzecinkowe).
Podsumowując, dobrą praktyką jest używanie w celu uzyskania czystszego i bardziej czytelnego kodu.
Na przykład zobacz prawdziwy przykład poniżej :
$insert .= "('".$tr[0]."','".$tr[0]."','".$tr[0]."','".$tr[0]."'),";
Lub prosty przykład, który drukuje np . '1','2','3','4'
:
print "foo: '" . $a . "','" . $b . "'; bar: '" . $c . "','" . $d . "'" . "\n";
i drukowanie ze sformatowanym łańcuchem:
printf("foo: '%d','%d'; bar: '%d','%d'\n", $a, $b, $c, $d);
gdzie printf()
jest równoważne zsprintf()
, ale wyświetla sformatowany ciąg zamiast zwracać go (do zmiennej).
Który jest bardziej czytelny?