2012-01-27 11 views
20

W języku C#, Doszedłem przyjąć następujący sposób inicjowania pustych strun:Jaki jest właściwy sposób inicjowania pustych ciągów w PHP?

string account = string.empty; 

zamiast

string account = ""; 

zgodnie z moim mentorem i innych C# deweloperów Rozmawiałem z tego, Pierwsza metoda to lepsza praktyka.

Powiedziałeś, że istnieje lepszy sposób na zainicjowanie pustych ciągów w PHP? Obecnie widzę następujące szeroko używane:

$account = ''; 

Dzięki.

+3

Struny nie są obiektami pierwszej klasy w PHP, więc nie jest tak naprawdę każde inne sposób na zainicjowanie ich w kodzie ... – rdlowrey

Odpowiedz

22

To, co robisz, jest poprawne. Niewiele więcej do powiedzenia na ten temat.

Przykład:

$account = ''; 

if ($condition) $account .= 'Some text'; 

echo $account; 

Można dostać głupie i zrobić coś takiego:

$str = (string) NULL; 

..ale to jest zupełnie bez sensu, i to jest dokładnie to samo - pusty ciąg.

Robisz to dobrze.

+0

Co z: $ account = null; ? – kaspnord

+0

Tak, to zadziała dobrze. Wszystko zależy od kontekstu, możesz chcieć sprawdzić, czy później wartość "NULL" zamiast "" "(pusty ciąg) (ale naprawdę nie powinieneś tego robić). Twoja metoda jest znacznie wyraźniejsza, możesz powiedzieć, że var jest ciągiem od razu. Słabe pisanie może być twoim przyjacielem lub wrogiem. –

3

Oto kilka innych rzeczy do rozważenia podczas pracy z ciągami znaków w PHP:

// Localize based of possible existence 
$account = (array_key_exists('account', $results)) ? $results['account'] : null; 

// Check to see if string was actually initialized 
return (isset($account)) ? $account : null 

// If a function is passed an arg which is REQUIRED then validate it 
if (empty($arg1)) { 
    throw new Exception('Invalid $arg1'); 
} 

echo $arg; 

// If you are looking to append to string, then initialize it as you described 
$account = null; 

if (!empty($firstName)) { 
    $account .= $firstName; 
} 

echo $account; 

// Also, it's better to initialize as null, so you an do simple check constructs 
if (is_null($account)) { 
    // Do something 
} 

// Versus these types of checks 
if ($account == '') { 
    // Do something 
} 

Zazwyczaj staram się unikać inicjowanie vars jak ten. Zamiast tego lokalizuję lub sprawdzam istnienie w całym kodzie, w przeciwnym razie kończy się utrzymywanie listy zmiennych, która może nie odzwierciedlać użycia w całym kodzie po inicjalizacji.

+0

Dzięki, to było pomocne. Niestety, nie mam wystarczającej liczby przedstawicieli, aby głosować na twoją odpowiedź. – kaspnord

+0

Bez obaw, baw się z PHP. –

5

W przeważającej części jest to nieistotne. W przeciwieństwie do wielu języków, w PHP (zwykle) nie ma znaczenia, czy zainicjujesz zmienną. PHP automatycznie rzuci niezainicjowaną (lub nawet niezgłoszoną) zmienną, odpowiednią do natychmiastowego użycia. Na przykład, następujące są poprawne:

$a; 
$a + 7; // Evaluates to 7 
$a . "This is a test."; // Evaluates to "This is a test." 
if (! $a) {} // Evaluates as true 

Jedynym zastrzeżeniem jest to, że wybierz funkcje sprawdzania typu zmiennej (jak robi ścisłej równości sprawdzenia ===). Na przykład: Następuje błąd:

$a; 
if (is_string($a)) { 
    print 'success'; 
} 
else { 
    print 'fail'; 
} 

Ta wygoda wiąże się jednak z dużymi kosztami. W przeciwieństwie do języków ściśle wpisanych (lub przynajmniej "ściśle określonych"), w samym języku podstawowym nie ma nic, co mogłoby pomóc w wykryciu typowych błędów programisty. Na przykład, co następuje chętnie wykonać, ale prawdopodobnie nie jak oczekiwano:

$isLoggedIn = getLoginStatus($user); 
if ($isLogedIn) { 
    // Will never run 
    showOrder($user); 
} 
else { 
    showLoginForm(); 
} 

Jeśli zdecydujesz się zainicjować wszystkie zmienne, zrób to tak jak ty. Następnie włącz powiadomienia PHP (E_NOTICE), aby uzyskać ostrzeżenia o niezainicjowanych zmiennych w czasie wykonywania. Jeśli nie, tracisz czas, a naciśnięcia klawiszy inicjalizują twoją własną zmienną.

0

chr(32) reprezentuje przestrzeń ASCII (tj. Ciąg o długości 1 bajta).

Jeśli chcesz uniknąć błędów jak $myEmpty = " " vs. $myEmpty = " " vs. $myEmpty = ""

Czasami trudno powiedzieć, kiedy istnieją dwie przestrzenie lub jeden lub żaden ludzkimi oczami. Korzystanie z funkcji, która jest na pewno rozwiązana.

I naprawdę pusty ciąg (zero bajtów), nie ma innego sposobu, ale po prostu zdefiniować go (single) cudzysłowie jak $nothing = '';

Powiązane problemy