<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://wiki.bloodwars.pl/index.php?action=history&amp;feed=atom&amp;title=Cs</id>
	<title>Cs - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bloodwars.pl/index.php?action=history&amp;feed=atom&amp;title=Cs"/>
	<link rel="alternate" type="text/html" href="https://wiki.bloodwars.pl/index.php?title=Cs&amp;action=history"/>
	<updated>2026-05-03T04:26:29Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.bloodwars.pl/index.php?title=Cs&amp;diff=1331&amp;oldid=prev</id>
		<title>Konrad: Zabezpieczył Cs ([edit=sysop] (na zawsze) [move=sysop] (na zawsze))</title>
		<link rel="alternate" type="text/html" href="https://wiki.bloodwars.pl/index.php?title=Cs&amp;diff=1331&amp;oldid=prev"/>
		<updated>2012-10-18T07:29:10Z</updated>

		<summary type="html">&lt;p&gt;Zabezpieczył &lt;a href=&quot;/index.php?title=Cs&quot; title=&quot;Cs&quot;&gt;Cs&lt;/a&gt; ([edit=sysop] (na zawsze) [move=sysop] (na zawsze))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''PROPOZYCJE STANDARDU KODOWANIA'''&lt;br /&gt;
&lt;br /&gt;
== Ścieżki ==&lt;br /&gt;
# Wszystkie podane katalogi wskazane są relatywnie do katalogu głównego skryptu.&lt;br /&gt;
# Wszystkie klasy znajdują się w katalogu ''classes/'' oraz mają nazwy identyczne jak nazwa klasy (ważna jest wielkość liter!), przykład: ''PierwszaKlasa.php''&lt;br /&gt;
# Pliki językowe znajdują się w katalogu ''language/''. Nazwa pliku zawiera 2 litery charakterystyczne dla języka, znak _ oraz kategorię językową, np. ''pl_parts.php''. Do obsługi plików językowych służy klasa Language (singleton).&lt;br /&gt;
# Pliki z danymi specyficznymi dla projektu znajdują się w katalogu ''data/''. Do obsługi tych danych służy klasa DataCollector (singleton).&lt;br /&gt;
# Szablony znajdują się się w katalogu ''smarty/templates/''. Do obsługi szablonów używana jest klasa MySmarty, dodatkowo główna aplikacja może korzystać z singletona MainTemplate.&lt;br /&gt;
# Wszystkie pozostałe pliki źródłowe znajdują się w katalogu głównym.&lt;br /&gt;
&lt;br /&gt;
== Konwencje nazewnicze ==&lt;br /&gt;
* Każda nazwa klasy powinna rozpoczynać się wielką literą, każdy następny człon nazwy również (np MainTemplate).&lt;br /&gt;
* Każda funkcja/metoda/zmienna/pole klasy powinny rozpoczynać się małą literą, każdy następny człon nazwy wielką (np. $myGreatVariable).&lt;br /&gt;
	&lt;br /&gt;
Przykład:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class ObiektKlasy&lt;br /&gt;
{&lt;br /&gt;
	private $poleKlasy;&lt;br /&gt;
	public $drugiePoleKlasy;&lt;br /&gt;
		&lt;br /&gt;
	//...&lt;br /&gt;
	public function metodaKlasy&lt;br /&gt;
	{&lt;br /&gt;
		//EMPTY BODY&lt;br /&gt;
	}&lt;br /&gt;
	//...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	$nowyObiekt=new ObiektKlasy();&lt;br /&gt;
	$nowaZmienna=$nowyObiekt-&amp;gt;getJakiesPole();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Każde celowo puste ciało pętli, funkcji etc. powinno być odpowiednio oznaczone. Dzięki temu ktoś, kto będzie czytać kod i zobaczy np. pustą pętlę, nie będzie się zastanawiał, czy tak musi być, czy jest to przeoczenie programisty, czy też powinien to sam zaimplementować. Przykład zaprezentowany powyżej (//EMPTY BODY).&lt;br /&gt;
&lt;br /&gt;
== Zapytania SQL ==&lt;br /&gt;
* wszystkie polecenia SQL powinny być pisane dużymi literami (SELECT, INSERT, SET, WHERE, LIMIT itd)&lt;br /&gt;
* wszystkie '''nazwy''' pól powinny być zawarte między znakami ``, np. `actExp`, `id`&lt;br /&gt;
* wszystkie '''wartości''' pól powinny być zawarte między znakami '' (chyba, że używana jest funkcja $db-&amp;gt;quote()).&lt;br /&gt;
* jeśli oczekujemy że zapytanie zwróci znaną przez nas liczbę rekordów (np równą jakiejś zmiennej lub liczbie), należy zastosować LIMIT, przykładowo dla 1 rekordu:&lt;br /&gt;
 SELECT * FROM `tabela` LIMIT 1;&lt;br /&gt;
* każde zapytanie zawarte w kodzie PHP powinno być przyporządkowane do jakiejś zmiennej (np $query), ułatwia to obsługę błędów (np poprzez wypisanie zawartości zapytania). Każde zapytanie powinno kończyć się średnikiem.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	$query = &amp;quot;treść zapytania;&amp;quot;;&lt;br /&gt;
	$rezultat = $db-&amp;gt;exec(query);&lt;br /&gt;
	echo $query; // DEBUG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obsługa błędów i wyjątki ==&lt;br /&gt;
* W żadnym skrypcie bezpośrednio związanym z projektem gry (oprócz skryptów wykonywanych niezależnie od użytkownika np skryptu aktualizacji rankingu) nie powinno pojawić się exit ani die. Zamiast tego powinien zostać rzucony wyjątek. &lt;br /&gt;
Przykład:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	$db-&amp;gt;beginTransaction();&lt;br /&gt;
	$query = &amp;quot;UPDATE `chars` SET `actExp`=`actExp`+'$expDst' WHERE `id`='$me-&amp;gt;id' LIMIT 1;&amp;quot;;&lt;br /&gt;
	$rows = $db-&amp;gt;exec($query);&lt;br /&gt;
	if ($rows != 1) { &lt;br /&gt;
		$db-&amp;gt;rollBack(); &lt;br /&gt;
		throw new Exception($query); &lt;br /&gt;
	}&lt;br /&gt;
	$db-&amp;gt;commit();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
====UWAGA!!!====&lt;br /&gt;
Rzucenie wyjątku oznacza przerwanie skryptu, wylogowanie użytkownika oraz wysłanie komunikatu o błędzie na maila kg@bwteam.pl. W związku z tym należy to robić tylko wtedy, gdy przewiduje się, że dane zachowanie skryptu oznacza błąd, w wyniku wystąpienia którego skrypt pod żadnym pozorem nie może być kontynuowany.&lt;br /&gt;
&lt;br /&gt;
* W przypadku wielokrotnych instrukcji warunkowych (poziom zagłębienia powyżej 3), powinniśmy utworzyć funkcję sprawdzającą każdy warunek po kolei oraz zwracającą false w przypadku gdy dalsze sprawdzanie nie może być wykonywane lub nie jest potrzebne. Przykład:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function funkcjaSprawdzajaca($playerId, $playerName) &lt;br /&gt;
{&lt;br /&gt;
	global $smarty;&lt;br /&gt;
	$db = Database::getInstance();&lt;br /&gt;
	$lang = Language::getInstance();&lt;br /&gt;
&lt;br /&gt;
	if ($playerId == $me-&amp;gt;id) {&lt;br /&gt;
		$smarty-&amp;gt;assign('error', $lang-&amp;gt;trade_cantOfferYourself);&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// sprawdz czy taki gracz w ogole istnieje&lt;br /&gt;
	$query = &amp;quot;SELECT `name` FROM `chars` WHERE `id`='$playerId' LIMIT 1;&amp;quot;;&lt;br /&gt;
	$playerName = $db-&amp;gt;get($query);&lt;br /&gt;
		&lt;br /&gt;
	if (!$playerName) {&lt;br /&gt;
		$smarty-&amp;gt;assign('error', $lang-&amp;gt;trade_invalidPlayerId);&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// dalszy kod który wykona się w przypadku niewystąpienia tych błędów&lt;br /&gt;
	...&lt;br /&gt;
	return true; // wszystko ok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Klamry i formatowanie kodu ==&lt;br /&gt;
* Każdy blok kodu zaznaczony klamrami { i } powinien zaczynać się od nowej linii, a instrukcje/deklaracje w nim zawarte powinny zaczynać się od tabulacji. Bardzo pomocne w zachowaniu tego punku standardu jest ustalone standardowo formatowanie kodu środowiska Eclipse.&lt;br /&gt;
* W przypadku pętli ustalamy że możliwe są dwie konwencje:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	if (warunek) {&lt;br /&gt;
		// tresc&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
lub&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	if (warunek) &lt;br /&gt;
	{&lt;br /&gt;
		// tresc&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* W przypadku funkcji ustalamy że otwierająca klamra ma znajdować się '''zawsze''' w nowej linijce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function jakasFunkcja()&lt;br /&gt;
{&lt;br /&gt;
	// ciało&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Niezaklasyfikowane/pozostałe ==&lt;br /&gt;
# Każda pętla lub instrukcja warunkowa powinna dotyczyć bloku pomiędzy dwoma klamrami ({ i }). Język pozwala pominąć klamry w pętlach i instrukcjach warunkowych, jeśli dotyczą pojedynczej linijki zakończonej znakiem ';'. Mimo to zastosowanie nawet w tym przypadku klamer ma dwie zalety. Po pierwsze poprawia czytelność kodu, a po drugie sprawia, że na pewno nie zapomnimy o dostawieniu klamer, jeśli liczba instrukcji w pętli zwiększy się.&lt;br /&gt;
# Każdy blok ''switch'' powinien zawierać etykietę ''default''. Jeśli nie ma sensownej logiki do umieszczenia w tej etykiecie, to kod w niej zawarty będzie obsługiwał nieprzewidziane wartości sprawdzanego wyrażenia. Nie da się przewidzieć wszystkiego - nawet, jeśli ktoś robi ''switch'' na zmienną wyliczeniową, która może przyjmować tylko kilka wartości, to przecież nikt nie powiedział, że nie trzeba będzie kiedyś tego typu rozszerzyć - wtedy taki ''default'' wychwyci ewentualne zapomnienia w uzupełnieniu instrukcji ''switch''. Jeśli warunek ''default'' nie powinien się nigdy zdarzyć w danej konstrukcji ''switch'', obsługa takiego nieprzewidzianego powinna polegać na rzuceniu wyjątku wraz z treścią wskazującą na wartość sprawdzanego parametru.&lt;/div&gt;</summary>
		<author><name>Konrad</name></author>
	</entry>
</feed>