Pytania każdy dobry programista PHP powinien być w stanie odpowiedzieć [zamknięty]
Przechodziłem przez pytania każdy dobry programista. Net powinien być w stanie odpowiedzieć i byłem pod wielkim wrażeniem treści i podejścia do tego pytania, więc w tym samym duchu zadaję to pytanie programiście PHP.
Jakie pytania Twoim zdaniem powinien być w stanie odpowiedzieć dobry programista PHP?
EDIT: zaznaczam to pytanie jako community wiki, ponieważ nie jest specyficzne dla użytkownika i ma służyć społeczności programistycznej na wolności.
Czekam na niesamowite odpowiedzi.
Uwaga : proszę również odpowiadać na pytania sugerowane w komentarzach, aby ludzie mogli nauczyć się czegoś nowego również w odniesieniu do języka.
17 answers
Co prawda ukradłem to pytanie skądś indziej (nie pamiętam już gdzie to przeczytałem), ale wydawało mi się, że to zabawne:
P: czym jest T_PAAMAYIM_NEKUDOTAYIM
?
A: Its operator rozdzielczości zakresu (podwójny dwukropek)
Doświadczony PHP ' er od razu wie, co to znaczy. Mniej doświadczeni (i nie hebrajscy) programiści mogą chcieć przeczytać to .
Ale teraz bardziej poważne pytania:
P: Jaka jest przyczyna tego warning: 'Warning: Cannot modify header information - Headers already sent', and what is a good practice to prevent it?
A: Cause: dane ciała zostały wysłane, powodując wysłanie nagłówków.
Prevention: upewnij się, że najpierw wykonasz kod specyficzny dla nagłówka, zanim wyprowadzisz jakiekolwiek dane ciała. Upewnij się, że nie wysłałeś przypadkowo białych znaków ani żadnych innych znaków.
P: co jest nie tak z tym zapytaniem: "SELECT * FROM table WHERE id = $_POST[ 'id' ]"
?
A: 1.[[61]} jest vulnarable do SQL injection. Nigdy nie używaj danych wejściowych użytkownika bezpośrednio w zapytaniach. Najpierw odkaż. Korzystaj z prepared statements (PDO) 2. Nie zaznacza wszystkich kolumn ( * ), ale określa każdą pojedynczą kolumnę. Jest to głównie po to, aby zapobiec gromadzeniu się zapytań w pamięci, gdy na przykład kolumna BLOB zostanie dodana w pewnym momencie w przyszłości.
P: co jest nie tak z tym stwierdzeniem if: if( !strpos( $haystack, $needle ) ...
?
A: strpos
zwraca pozycja indeksu, gdzie po raz pierwszy znalazł $ igłę, która może być 0
. Ponieważ 0
również rozwiązuje się false
rozwiązaniem jest użycie ścisłego porównania: if( false !== strpos( $haystack, $needle )...
P: jaki jest preferowany sposób napisania tego if i dlaczego?if( 5 == $someVar )
lub if( $someVar == 5 )
o: Pierwszy, ponieważ zapobiega przypadkowemu przypisaniu 5 do $someVar, gdy zapomnisz użyć 2 equalsigns ($someVar = 5
), i spowoduje błąd, drugi Nie. {[26]]}
P: biorąc pod uwagę to kod:
function doSomething( &$arg )
{
$return = $arg;
$arg += 1;
return $return;
}
$a = 3;
$b = doSomething( $a );
...jaka jest wartość $a
i $b
po wywołaniu funkcji i dlaczego?
A: $a
jest 4
i $b
jest 3
. Pierwsza ponieważ $arg jest przekazywana przez odniesienie, druga ponieważ wartość zwracana funkcji jest kopią (nie odwołaniem się do) wartości początkowej argumentu.
OOP specific
P: Jaka jest różnica między public
, protected
i private
w klasie definicja?
A: public
czyni członka klasy dostępnym dla "wszystkich", protected
czyni członka klasy dostępnym tylko dla siebie i klas pochodnych, private
czyni członka klasy dostępnym tylko dla samej klasy.
P: co jest nie tak z tym kodem:
class SomeClass
{
protected $_someMember;
public function __construct()
{
$this->_someMember = 1;
}
public static function getSomethingStatic()
{
return $this->_someMember * 5; // here's the catch
}
}
A: statyczne metody nie mają dostępu do $this, ponieważ statyczne metody mogą być wykonywane bez tworzenia instancji klasy.
P: Jaka jest różnica między interfejsem a klasą abstrakcyjną?
A: interfejs definiuje umowę pomiędzy klasą implementującą is a obiektem wywołującym interfejs. Klasa abstrakcyjna wstępnie definiuje pewne zachowanie dla klas, które będą je rozszerzać. Do pewnego stopnia można to również uznać za umowę, ponieważ gwarantuje ona istnienie pewnych metod.
P: co jest nie tak z klasami, które definiują gettery i settery, które mapują wprost do niego członków wewnętrznych, bez posiadania metod, które wykonują zachowanie?
o: to może być zapach kodu, ponieważ obiekt działa jak uszlachetniona tablica, bez większego użycia.
Q: dlaczego implementacja PHP z wykorzystaniem interfejsów jest nieoptymalna?
A: PHP nie pozwala na zdefiniowanie oczekiwanego typu zwrotu metody, co zasadniczo czyni interfejsy dość bezużytecznymi. :- P
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-15 19:49:19
Definitywne pytania bezpieczeństwa !
(proste odpowiedzi w tym poście, oczywiście zabezpieczanie aplikacji internetowych php jest znacznie bardziej złożone)
- Jak radzić sobie z SQL injection ?
Mysql_real_escape_string() na początek MySQL. Następnie spróbuj nauczyć się PDO, aby wykorzystać przygotowane oświadczenia i przenośność między dostawcami baz danych.
- Jak radzić sobie z CSRF (Cross-Site Request Forgery) ?
Dodaj token do każdego ważnego żądania, aby zabezpieczyć ważne operacje (użytkownik musiał zobaczyć Formularz przed wysłaniem kluczowego żądania).?
- Jak radzić sobie z XSS (Cross-Site Scripting)?
Htmlentities() jest dobre na początek.
- wariant zastrzyków XXX: wstrzyknięcie LDAP, wstrzyknięcie XPath itp... ?
Musisz wiedzieć, co to jest" słownictwo "używane przez XXX, a następnie odliczyć to, co musisz wyczyścić i / lub"sprawdzić i odrzucić".
- Jaka jest lista sensible funkcje ?
Funkcje interpretujące kod PHP (prawdopodobnie zawarte w zdalnym pliku) lub wykonujące polecenia w systemie. Krótka i niekompletna lista może być: exec (), passthru (), system (), popen (), eval (), preg_replace ()...
- Jak radzić sobie z niebezpieczeństwami dołączania plików ?
- co to jest ścieżka poprzeczna ?
- Jakie jest ryzyko związane z przesyłaniem plików ?
Wymaga dokładnego sprawdzenia parametrów użytych przy otwieraniu pliku lub zdalnego zasoby.
- jak wymusić konfigurację konfiguracji PHP (tzn. czy wiesz jakie jest użycie php.ini)?
To będzie długo, więc pomijam odpowiedź, proszę przeczytać instrukcję PHP.
- o filtrowaniu danych użytkownika: jaka jest różnica międzydezynfekowaniem Asprawdzaniem i odrzucaniem ?
Pierwszy przekształca wpis w coś mniej wrogiego. Drugi sprawdza, czy wpis jest poprawny, a jeśli nie odmawia to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-23 00:36:39
"dlaczego nie używasz czegoś innego?"
Sorry, ktoś musiał to powiedzieć:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 17:44:14
Czy php jest cross-browser?
(wiem, to sprawi, że wiele osób, ale jest bardziej-zadawane pytanie na forach php!)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 16:56:03
Myślę, że dobrym pytaniem byłoby: Jak działa HTTP? Praca z danymi GET
i POST
wśród innych komunikatów HTTP jest nieodłączną częścią rozwoju PHP. Zrozumienie, jak działa HTTP w szerszym kontekście i jak PHP implementuje to idzie długą drogę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-22 11:55:38
Jaka jest różnica między = = A = = i dlaczego w ogóle chcesz używać==?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-23 00:17:54
Wyjaśnij dlaczego poniższy kod wyświetla 2.5
zamiast 3
:
$a = 012;
echo $a / 4;
Odpowiedź: gdy liczba jest poprzedzona 0
w PHP, liczba jest traktowana jako ósemkowa Liczba (baza-8). Dlatego liczba ósemkowa 012
jest równa liczbie dziesiętnej 10
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 01:48:43
Nikt jeszcze nie poruszył tego tematu, ale jest to coś, o czym każdy programista PHP powinien móc mówić obszernie: dlaczego register_globals
jest źle?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 18:00:34
Gdy strona jest rozwijana przy użyciu php i to jest kompletna bzdura, prawda:
A) błąd PHPs
B) Błąd programistów
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 17:01:33
Jaka jest najlepsza praktyka unikania wprowadzania danych przez użytkownika? (To pytanie pojawia się często)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 16:51:09
-
Podczas wywoływania elementu" name " tablicy$, co jest poprawne?:
$array[name]
$array['name']
Oba często działają, ale tylko cytowana forma jest poprawna. I patrzeć jak robale latają. Za dużo tego widziałem.
-
Jak wymusić, aby Elementy formularza były przesyłane jako tablica?
Dołączenie pustych nawiasów do atrybutu name: wiele elementów {[3] } zostanie przekonwertowanych na tablicę na serwerze (np.
$_POST['checkboxes'][0..n]
). Nie wiem. myślę, że jest to w 100% specyficzne dla PHP, ale na pewno przebija pętlę przez {[5] } dla każdego możliwego'checkboxes'.$i
elementu. -
Mysql_, mysqli_, czy PDO?
Jest tylko jedna naprawdę zła odpowiedź: biblioteka mysql_ nie robi gotowych instrukcji i nie może już usprawiedliwiać swojej zdolności do zła. Nazwanie funkcji, która ma być wywołana wiele razy na wykonane zapytanie, "
mysql_real_escape_string()
", jest tylko solą w ranie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 18:58:46
"jaki jest Twój ulubiony debugger?"
"Jaki jest Twój ulubiony profiler?"
Rzeczywista aplikacja / ide / frontend nie ma większego znaczenia, o ile wykracza poza " notatnik, echo i microtime ()". Jest tak mało prawdopodobne, że zatrudnisz jednego na miliard dewelopera, który cały czas pisze doskonały kod, a jego testy jednostkowe wykryły wszystkie błędy i wąskie gardła, zanim jeszcze wystąpią, że chcesz kogoś, kto może profilować i / lub przejść przez kod i znaleźć błędy w skończonym czasie. (To prawda prawdopodobnie dla wszystkich języków / platform, ale wydaje mi się, że jest to trochę słabo rozwinięty zestaw umiejętności wśród programistów php, czysto subiektywnie mówiąc)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 17:49:05
Terry Chay ma wpis na blogu podsumowujący to, co każdy programista PHP powinien wiedzieć i / lub oczekiwać, że odpowie w pewnym stopniu na rozmowie kwalifikacyjnej.
Http://terrychay.com/article/php-coders.shtml
Myślę, że to świetne podsumowanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 18:06:14
Zapytałbym coś w stylu:
A) a co z buforowaniem?
B) jak zorganizować pamięć podręczną?
C) czy na pewno nie robisz dodatkowych zapytań DB? (W moich pierwszych rzeczach, które zrobiłem na PHP było to mysql_query wewnątrz foreach, aby uzyskać nazwy użytkowników, którzy zrobili komentarze... straszne :))
D) dlaczego register_globals jest złem?
E) dlaczego i jak należy rozdzielać widok od kodu?
F) jaki jest główny cel "wdrożenia"?
Oto pytania, które nie były jasne w ogóle dla mnie po przeczytaniu kilku podstawowych książek. Dowiedziałem się wszystkiego o zastrzykach i csx, strpos w ciągu kilku dni\tygodni przez tysiące FAQ w Internecie. Ale dopóki nie znalazłem odpowiedzi na te pytania mój kod był naprawdę straszny:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-10 11:59:23
Dlaczego nigdy nie należy bezpośrednio wysyłać danych wejściowych użytkownika!
Drukowanie takich rzeczy jak dane bezpośrednio z GET może prowadzić do luk w zabezpieczeniach Cross-Site scripting (XSS). Dlatego zawsze należy najpierw wysłać dane wejściowe od klienta za pomocą metody htmlspecialchars ().
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 16:52:07
Wyjaśnij różnicę
Extract ()
Explode ()
Implode ()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-13 21:33:50
Co jest nie tak z poniższym kodem?
$a = 2;
function foo()
{
$a = 3;
}
foo();
echo $a;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-24 00:10:03