Jump to content
BulForum.com

PHP уеб платформи


Recommended Posts

Не, не стана ясно :)

 

Нещо липсват запетайки едно друго.., както и нещо свързващите частици на места объркват.

'част от методи (overriding)' - как така?

Имаш някакви класове, които работят с БД, Ок. (Даже не виждам защо в тях наследяваш въпросния Connector за връзка с базата, не виждам да е нужно). Ползват методи 'в' друг клас? Или ОТ друг клас?

Overriding на кои методи в кой клас? :)

Каква е целта на занятието? Струва ми се, че излишно търсиш усложняване и композиция, там където не е нужна :bgrin:

 

Ако търсиш начин да наследиш няколко класа в един, не става, освен ако ползваш интерфейси към другите класове, които искаш да наследиш след първия.

Link to comment
Share on other sites

  • Replies 119
  • Created
  • Last Reply

Сега се осъзнах , имам cisco и оракъл , пак са стари (от няколко години) , объркал съм в горния пост версията ... ама мразе аз разбирам малко от тези неща за това искам да науча повече .

:laughing:

Link to comment
Share on other sites

Сега се осъзнах , имам cisco и оракъл , пак са стари (от няколко години) , объркал съм в горния пост версията ... ама мразе аз разбирам малко от тези неща за това искам да науча повече .

:laughing:

 

Аз като ти говоря че кой кво написал, на теб рядко успява да ти се разбере какво имаш предвид :) В такъв случай - дерзай... пък като се научиш да го администрираш свирни аз ще ти намеря работа :P

Link to comment
Share on other sites

Още веднъж ,но този път малко по-разширено :

 

Трябва ми един клас който да прави връзка с база данни . Като се използва връзката трябва да напиша няколко класа които имат доста сходни методи (add , delete , update , index , show ) . Разликата при последните класове ще е примерно в query-тата и параметрите които приемат , най-вероятно няма да е нищо повече . Освен да направя един клас който да има тези методи(add, delete ,update , delete , index , show) като му подавам query-тата през метода , както и параметрите които са му нужни за изпълнение ,но все пак мисля ,че има какво да се доразвие като идея. В конструктора си да създава нов обект от тип Connector за да има връзка с базата данни. И от тук ще следва ,че всеки нов клас ще наследява гореспоменатия като използва същите методи със зададени параметри . Сега малко по-ясно ли е ? :)

Link to comment
Share on other sites

.........

 

Ти DAL и BLL ли се опитваш да направиш и искаш всяко "business entity" да има възможност да се добавя, записва, търси и т.н. а най-отгоре да ползваш общите методи без да се задълбочаваш това "марули" ли са или "боб" ? Това ли се опитваш да направиш всъщност че на мен така обяснено доста объркано ми звучи :)

Link to comment
Share on other sites

В общи линии просто искам да ползвам общи методи които са в един супер клас или родител , без да се интересувам дали са боб или марули :D

Link to comment
Share on other sites

В общи линии просто искам да ползвам общи методи които са в един супер клас или родител , без да се интересувам дали са боб или марули :D

 

И какво точно те спира? :)

Link to comment
Share on other sites

Класът за връзка с базата Connector защо изобщо искаш да го наследяваш?

Остави го него, и просто го ползвай във всеки клас, който искаш.

Даден клас от приложението ти ще има нужда сигурно да наследява къде по-полезни класове.

 

Когато имаш няколко класа, които ще имат методи с еднакви имена и различна функционалност, ми идва на ума да направиш един абстрактен клас с тия методи и въпросните класове да ги имплементират.

 

Но зависи как ще искаш да ги ползваш, първо е нужно ти сам за себе си да развиеш какво точно търсиш с въпросното изпълнение.

Добре си почнал с параметризирането на sql-а в Connector (btw името Connector не ми навява мисъл за връзка с БД, а просто като връзка с нещо), можеш да го доразвиеш до методи, които не зависят от точния вид на заявката, примерно метод ExecuteInsert(array(...)), или отделен клас SQLStatement(), с който се създава обект-заявка и клас за изпълнение, даже си мислех за имплементация, подобна както е в .NET, минах през различни начини за осъществяване на операции с БД, в момента съм с един статичен клас за целта, защото за по-прости неща целия овърхед на създаването на обекти за работа с базата, от десетките класове, е прекалено голям, макар и по-добър от гл. точка на реализация.

Но аз лично, където просто няма нужда от наследявания, не наследявам напразно.

 

Ако си правиш някакъв framework за връзка с базата, помисли добре как ще го ползваш, за какви проекти, и как да си улесниш живота и да не се занимаваш с глупости занапред.

 

Edit:

aha, вие сте писали междувременно.

Ами щом само това искаш, начинът с абстрактния клас мисля, че те устройва. Той е един вид интерфейс, с който можеш да подаваш напред назад типа клас, и с него не те интересува от кой клас точно иде метода, въпроса е имената и параметрите да са същите.

 

А ако искаш и еднакви имена с различни параметри на едно ниво (overloading), по-добре се откажи, въпреки че това е безценен инструмент. Просто в PHP това не е реализирано като хората, а с някакви малоумни трикове, което дразни и по-добре да не се ползва според мен. Ако ми потрябва нещо такова, просто ползвам други начини.

 

EDIT:

...В конструктора си да създава нов обект от тип Connector за да има връзка с базата данни. И от тук ще следва ,че всеки нов клас ще наследява гореспоменатия като използва същите методи със зададени параметри ..

Само да доуточним, да не смяташ всеки клас, който ползва Connector, и създава нов обект от него, да прави нова конекция към базата данни с mysql_connect()? Ако имаме 40-50 класа, какво става?!

Предполагам линка към базата ти е статичен мембър и се създава само при първото извикване :).

Link to comment
Share on other sites

Ъм , едва ли ще пусна да има 40 конекции , за всеки клас по една :lol: . Ще ползвам singleton pattern-a и по-точно нещо такова :

	private static $instance;

public static function getInstance()
{
	if(!self::$instance)
	{
		self::$instance = new PDO("mysql:host=localhost;dbname=mypage", 'root', '');
		self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	}
	return self::$instance;
}

Link to comment
Share on other sites

Хм, знаеш ли, когато се налага Singleton, аз лично се замислям какъв е смисъла (освен ако не се нуждая силно от наследяване), пред ползването на просто изцяло статичен клас. Така и правя, където може просто статичен клас е по-пъргаво и просто, понеже ако ще се ползва само една инстанция, се губи до известна степен смисъла.

Дори и да не ползваш singleton, в конструктора можеш да ползваш статична връзка, която се създава при първата инстанция само.

Не-статичен клас за изпълнение на заявки бих ползвал ако примерно ще ми се случва да подготвям няколко заявки и по някое време да ги изпълнявам в пакет, или подобни изпълнения, иначе всеки от десетките класове да създава нов обект, е малко пресилено, макар и с една конекция, а пък ако всеки клас ще ползва една инстанция, статичен клас е достатъчен.

 

Т.е. аз лично избягвам singleton където мога :)

Link to comment
Share on other sites

И попринцип какъв ще е смисъла на клас ако целия е статичен, губи се смисъла да ползваш клас. ;)

А какво да ползвам, разхвърляни в global namespace функции ли?

Както стринговите функции, 'отделени' само с някакъв str_ префикс, при тва не всичките, ами хаотично избрани.

 

Според теб кое налага да използваш не-статичен клас за връзка с базата данни? Просто ми е интересно мнението ти, разбира се, че има смисъл, но всеки може да го вижда на различно място.

Link to comment
Share on other sites

И попринцип какъв ще е смисъла на клас ако целия е статичен, губи се смисъла да ползваш клас. ;)

Никак даже не се губи смисъла . Никога не може да си сигурен дали ще може да ти се наложи да добавиш нещо към него без да преработваш 20-30 реда код разположени в 5-10 различни файла.

Класове които са тясно свързани с обработката на данни от базата са почти изцяло със статични методи . Защо да заделяш място и да пишеш няколко излишни реда когато метода прави едно и също нещо всеки път ? Само колко по-добре изглежда всичко когато е събрано в един клас с ясно изразена цел и методи за постигането и ...

 

( Много се размечтах нещо :) )

Link to comment
Share on other sites

А какво да ползвам, разхвърляни в global namespace функции ли?

Както стринговите функции, 'отделени' само с някакъв str_ префикс, при тва не всичките, ами хаотично избрани.

 

Според теб кое налага да използваш не-статичен клас за връзка с базата данни? Просто ми е интересно мнението ти, разбира се, че има смисъл, но всеки може да го вижда на различно място.

 

Работил съм с бази данни доста рядко, така че няма да давам мнение за тях, просто дадох мнение за изцяло статичните класове, помна че и преди време на един приятел му отхвърлиха кандидатурата за работа тъй като имал напълно статичен клас като му обясниха любезно, че не трябва да се ползват така класовте и че един ден ще разбере. :D

 

Аз принципно съм C++ програмист и да за такива функции бих ползвал namespace вместо статичен клас. :)

Link to comment
Share on other sites

Работил съм с бази данни доста рядко, така че няма да давам мнение за тях, просто дадох мнение за изцяло статичните класове, помна че и преди време на един приятел му отхвърлиха кандидатурата за работа тъй като имал напълно статичен клас като му обясниха любезно, че не трябва да се ползват така класовте и че един ден ще разбере. :D

 

Аз принципно съм C++ програмист и да за такива функции бих ползвал namespace вместо статичен клас. :)

Само дето в PHP няма namespaces ;) .

Приятелят ти явно не е кандидатствал za PHP, направил е нещо идиотско с статичен клас, или изпитващите са били и те 'големи майстори' от типа "като порастнеш, ще разбереш" :sick .

Link to comment
Share on other sites

Напротив , в PHP вече има поддръжка на namespaces (справки php.net) , още не са в стейбъл вариант ,но се върви нататък . С нетърпение очаквам PHP 6 , езикът все повече се приближава към java което на мен лично много ми харесва.

 

THE STORM , в коя фирма е кандидатсвал твоя приятел ?

 

Така да вметна ,че освен обекти които имат за цел да взаимодействат с данни , изцяло статични обекти не ми се е налагало да пиша ? Освен да е някакъв контейнер за функции наричани във framework-овете още helpers

Link to comment
Share on other sites

Напротив , в PHP вече има поддръжка на namespaces (справки php.net) , още не са в стейбъл вариант ,но се върви нататък . С нетърпение очаквам PHP 6 , езикът все повече се приближава към java което на мен лично много ми харесва.

 

А ако вземат да махнат и омразния $ пред всяка променлива направо цена няма да имат. След това да отделят кода от html-a по културен начин като в asp.net и ще вземе да заприлича на нещо :)

Link to comment
Share on other sites

Не , не :) PHP трябва да остане езикът на богатите :P ( или тези които искат да забогатеят бързо като напишат една контактна форма :D ) . Няма съмнение ,че все повече заприличва на нещо , но накрая ще видим точно на какво :P

Link to comment
Share on other sites

Знаеш ли кога namespaces ще заприлича на нещо, готово за ползване? Точно никога :)

Е, сериозно, на ОО модела му трябваха немалко години, та чак в 5 да заприлича на нещо.

Като гледам, NS са се появили едва в 5.3 алфа?! :) Забележи, алфа. При това експериментално.

А и познай колко хостинги и кога ще инсталират 5.3. Оня ден имах проблем с един хостинг, който явно свикнал да компилира 5.2.0, при поредния си срив (явно), отново беше компилирал същата версия, според датата в phpinfo().

Някои още карат с php4!

 

Едва в 6 може да стават за нещо.

А да се пише нещо с тях, което да си сигурен, че ще се изпълнява почти навсякъде, забрави в близките 2-3 години :)

 

Дядомраз, това, за което говориш да се случи, няма да е скоро. Щом и в 6 ще има $ и е далеч от такова разделение (за което има разни решения), далеч в бъдещето и твоите идеи може да имат почва.

Но и пхп не му е това целта засега.

Link to comment
Share on other sites

THE STORM , в коя фирма е кандидатсвал твоя приятел ?

 

Помна ли, някаква от jobs.bg... Но ако наистина те интересува името на фирмата ще го питам. :)

Link to comment
Share on other sites

Знаеш ли кога namespaces ще заприлича на нещо, готово за ползване? Точно никога :)

Това ми звучи малко като текст от една песничка "Знаеш ли ,момче, кога ще стигнеш доброто ? По-добре попълни фиш и си пусни тото ." . :)

 

(Брех , какъв съм бил рапър :lol: ) .

Link to comment
Share on other sites

  • 2 weeks later...

Четох, четох, стана ми тъпо и пак продължавах да чета. Разводнихте темата с какво ли не, да не говорим че не видях дори ред за "PHP уеб платформи" - май това е заглавието на темата? Не знам какво да си мисля? Аз ли не знам какво е "PHP уеб платформа" или вие не знаете какво влагате по това название? Може би Zend Platform не е "PHP уеб платформа"?

 

Anyway, като изключим това че не пишете по темата която сами сте създали, имаше няколко момента които ми грабнаха вниманието.

 

Tedy, ето кода които използвам аз за magic_quotes глупостта:

 

if(get_magic_quotes_gpc()){

foreach($_POST as $k=>$v) if(is_string($v)) $_POST[$k] = stripslashes($v);

foreach($_GET as $k=>$v) if(is_string($v)) $_GET[$k] = stripslashes($v);

foreach($_COOKIE as $k=>$v) if(is_string($v)) $_COOKIE[$k] = stripslashes($v);

}

 

Слагаш си го най-горе на index.php файла (или в някоя от библиотеките които се зареждат) и забравяш (освен ако не си пускаш масиви по GET/POST, което лично аз правя само в краен случай и съответно доста рядко ми се случва).

 

Не разбрах как решихте, че слабото типизиране на езика е негов минус? Ако не знаеш какво пишеш - да, за теб ще е минус и ще ти е трудно - в такъв случай просто използвай type casting, за да знаеш какъв тип проверяваш. Ето пример:

 

if (!$x) echo $x;

 

При това положение, echo-то ще ти се изпълни при следните случаи:

- $x = false

- $x = 0

- $x = '' (празен стринг)

- $x = array() (празен масив)

 

Ако искаш да провериш дали променливата ти е === 'false', просто ползвай правилното сравнение:

 

if ($x === false) echo $x;

 

В дадения пример, $x ти е false, така че няма да ти извади нищо :D Но схванахте идеята на примера, надявам се.

 

 

На едно място засегнахте промените от PHP4 към PHP5, както и MySQL4 и 5.. и че някой-си го било страх да си ги ъпгрейдне. Всъщност, в случая новите версии добавят само хубавинки. На някои места са леко объркващи, докато не се сблъскаш с тях - например, смяната на приоритета на запетайката при MySQL >5.0.18 - но пък се учиш от грешките си ;) При PHP ме издразни това че от 4 към 5 са сменили функцията на оператора за сравнение ===. В 4 с него можеше да проверяваш два стринга със case sensitive, докато в PHP 5 това проверява дали променливите са с еднаква стойност (ако е стринг го проверява без значение големи-малки букви) и дали са от един тип.. пример:

 

var_dump((0 === "0"));

 

PHP4: true

PHP5: false

 

var_dump(("text" === "Text"))

 

PHP4: false

PHP5: true

 

Накратко казано - не съм съгласен с доста от нещата които изписахте. Ако си ъпгрейдваш PHP-то, логично трябва да знаеш какви са промените които си слагаш на машината, съответно какви промени са настъпили в езика на който пишеш.

 

Ако ще сравнявате езици за писане на уеб приложения, сравнявайте ги на един фронт. PHP е език създаден за уеб страници предимно, като поддържа и CGI интерфейс. Както сами казахте - това е скриптов език и това не е недостатък - това е предимство, освен в случаите когато искаш да си encrypt-неш кода :) Защо не видях някой да прави сравнение между PHP и RoR например? Това мисля са най-широко използваните езици за писане на приложения за уеб.

 

@djadomraz, правиш ли разлика между framework и език за програмиране? Искренно се надявам от PHP.net да мислят че правят език за да си остане той такъв. Сами казахте че .NET е framework. Ако искате framework за PHP - свалете си един от интернет и го използвайте както намерите за добре. Ако не ви харесват - напишете свой, нали сте писачи ;)

 

Легенда:

* приложение за уеб - уеб страница/сайт предоставящ дадена услуга. пример: youtube.com

Link to comment
Share on other sites

Ако ще сравнявате езици за писане на уеб приложения, сравнявайте ги на един фронт. PHP е език създаден за уеб страници предимно, като поддържа и CGI интерфейс. Както сами казахте - това е скриптов език и това не е недостатък - това е предимство, освен в случаите когато искаш да си encrypt-неш кода :) Защо не видях някой да прави сравнение между PHP и RoR например? Това мисля са най-широко използваните езици за писане на приложения за уеб.

 

 

Всъщност не видях никъде друго освен размисли и страсти относно PHP но не те видях да сравняваш езици.

 

 

 

 

 

@djadomraz, правиш ли разлика между framework и език за програмиране? Искренно се надявам от PHP.net да мислят че правят език за да си остане той такъв. Сами казахте че .NET е framework. Ако искате framework за PHP - свалете си един от интернет и го използвайте както намерите за добре. Ако не ви харесват - напишете свой, нали сте писачи ;)

 

Не аз съм вчерашен и никаква разлика не правя. Но като език също има какво да се иска от него. И това че съм писал за разделянето на HTML-a от кода не виждам какво общо би имал framework-a примерно. От гледна точка на писане на web приложения както PHP, така и .NET-a предоставят набор от функции/класове които може да ползваш при писане на програмата. Tedy обясни някои от недомислиците в PHP, а пък главното което аз не харесвам е маркирането на всяка променлива с $, това че не се компилира (оттам хубав syntax check и всевъзможни проверки на кода които един компилатор прави), до един момент нямаше и дебъгер. Има какво още да се иска от PHP-то, колкото и да го хвалите. Да, има си приложение не отричам, просто не може да се ползва за всичко.

Link to comment
Share on other sites

Към dX.

 

Аз всъщност не видях и ти да казваш нещо по-различно по темата, и не видях нещо ново извън 'стандарта', в която писахме дотук :) .

Затова критиката по отношение на темата на темата мис е струва неуместна. Наистина заглавието трябваше да е може би просто 'PHP', но по презумпция тук се пишат всякакви неща за PHP, поради липса на друга тема май, освен това тази тема беше създадена от преместена група постове от една друга тема, в която бяха станали доста offtopic.

 

Поред на номерата.

 

Четох, четох, стана ми тъпо и пак продължавах да чета. Разводнихте темата с какво ли не, да не говорим че не видях дори ред за "PHP уеб платформи" - май това е заглавието на темата? Не знам какво да си мисля? Аз ли не знам какво е "PHP уеб платформа" или вие не знаете какво влагате по това название? Може би Zend Platform не е "PHP уеб платформа"?

 

Anyway, като изключим това че не пишете по темата която сами сте създали, имаше няколко момента които ми грабнаха вниманието.

 

Tedy, ето кода които използвам аз за magic_quotes глупостта:

 

if(get_magic_quotes_gpc()){

foreach($_POST as $k=>$v) if(is_string($v)) $_POST[$k] = stripslashes($v);

foreach($_GET as $k=>$v) if(is_string($v)) $_GET[$k] = stripslashes($v);

foreach($_COOKIE as $k=>$v) if(is_string($v)) $_COOKIE[$k] = stripslashes($v);

}

 

Слагаш си го най-горе на index.php файла (или в някоя от библиотеките които се зареждат) и забравяш (освен ако не си пускаш масиви по GET/POST, което лично аз правя само в краен случай и съответно доста рядко ми се случва).

Кодът за стрипване на slashes, който си дал безспорно е един от начините. Не по-добър от досега предложените, но може да е по-лош. Например да предположим, че в приложението използваш и 3rd party модули, писани от някой друг. Аз например ползвам чат пат такива. Чрез включване. И какво ще стане в момента, в който тяхната логика също направи stripslashes на параметрите, след твоя 'глобален' метод по целите _GET/_POST масиви? Т.е. излиза, че точно този алгоритъм не е safe.

С моя метод, чрез отделен клас Request-> с отделен метод за всеки тип параметър, който ми трябва, също съм забравил за тия неща ;) .

 

Не разбрах как решихте, че слабото типизиране на езика е негов минус? Ако не знаеш какво пишеш - да, за теб ще е минус и ще ти е трудно - в такъв случай просто използвай type casting, за да знаеш какъв тип проверяваш. Ето пример:

if (!$x) echo $x;

 

При това положение, echo-то ще ти се изпълни при следните случаи:

- $x = false

- $x = 0

- $x = '' (празен стринг)

- $x = array() (празен масив)

 

Ако искаш да провериш дали променливата ти е === 'false', просто ползвай правилното сравнение:

 

if ($x === false) echo $x;

 

В дадения пример, $x ти е false, така че няма да ти извади нищо :D Но схванахте идеята на примера, надявам се.

Идеята е ясна на всеки php писач. Но явно и ти не си схванал основната идея на критиките ни :) . Точно тия 4 реда, които си дал за пример, че връщат false горе, са резултатен обект на критиките. Малка част. И смисъла е по-дълбок, макар че признавам, че подобно релаксиране, което позволява горното, ми допада нерядко и на мен и позволява интересни решения. Което не ги прави по-добри обаче. Не можеш да твърдиш просто ей така, че "който знае какво пише, не му е трудно да се оправи с горната особеност на езика". Ми ... то самият факт че не само за false в случая с !$x е изпълнено if(!$x), е достатъчен за сериозна критика. Но проблемът в случая се корени доста надълбоко в цялата идея за изграждане на езика, и поне всички са били наясно (предполагам) какво ще излезе накрая. Това не пречи да сравняваме основни принципи между езиците, в повечето от сериозните от които, типизирането е строго, и се пишат не по-лоши, но и по-добри от архитектурна гл. точка програми :) . Дядомраз знае за какво става дума :) . Това с типовете може да обърка и най-големия писач, когато нещата опрат до големи приложения. И най-малкото е че, както спомена Дядомраз, такива обърквания няма кой да ти ги подскаже, защото няма компилатор, който да мисли вместо теб. При строги типове компилаторът ти показва неща, които и не си сънувал като грешки. При PHP с големи неща, винаги ще се случва да се бориш с какви ли не идиотски недоразумения, като ДОПЪЛНЕНИЕ към тия, които са допуснати в бизнес-логиката.

Като пример наскоро се сблъсках с нещо. Имам масив, чийто индекси са стрингове от типа '0', '1', '2', и.т.н., не ме питай откъде идва тоя масив, просто е такъв. Във foreach() си го обикалям. Не се сещам само, но мисля беше нормално обикаляне, а не с указатели (грубо казано). Оказа се, че ключът, който получавам при всяка итерация, е от тип int, а не стринг, както очаквам да е. И това объркваше доста неща, докато го открия. Е, ми не съм го знаел това дотогава, повечето неща човек научава като се сблъска с тях. По-надолу гледам, че си на същото мнение.

 

На едно място засегнахте промените от PHP4 към PHP5, както и MySQL4 и 5.. и че някой-си го било страх да си ги ъпгрейдне. Всъщност, в случая новите версии добавят само хубавинки.

Както сам казваш, не са само добавяния, а винаги има и доста промени, които в повечето случаи са несъвместимости, принуждаващи да се променя кода, да не говорим и колко несъвместими промени има и в някои подверсии. А самият език предполага и предразполага програмистите да му ползват И някои бъгове и особености да ги обръщат в своя полза, и като ги оправят в някоя подверсийка тия недоглеждания, и прас. Вярно, писачите не е трябвало да разчитат на нарочни или недогледани особености, но езикът е пълен с релаксирани конструкции и какво ли не, което просто зове да ползваш неща, за които още в момента знаеш, че ще съжаляваш след време :) . Строгите езици поне те предпазват от тези съвременни пороци :).

 

var_dump(("text" === "Text"))

 

PHP4: false

PHP5: true

Я пак? Тук трябва просто да го пробваш, защото яко си се заблудил нещо. Оператор === означава равенство, включително на типовете. Горното за PHP5 връща не true, а false. Не разбирам защо точно това невярно твърдение трябваше да дадеш за пример, но карай.

 

Накратко казано - не съм съгласен с доста от нещата които изписахте. Ако си ъпгрейдваш PHP-то, логично трябва да знаеш какви са промените които си слагаш на машината, съответно какви промени са настъпили в езика на който пишеш.

Значи сме квит :) .

 

Ако ще сравнявате езици за писане на уеб приложения, сравнявайте ги на един фронт. PHP е език създаден за уеб страници предимно, като поддържа и CGI интерфейс. Както сами казахте - това е скриптов език и това не е недостатък - това е предимство, освен в случаите когато искаш да си encrypt-неш кода :) Защо не видях някой да прави сравнение между PHP и RoR например? Това мисля са най-широко използваните езици за писане на приложения за уеб.

Няма как да е на един фронт, някои са развити дотолкова и са срастнали с фреймуърците си хехе, че тук терминът 'един фронт' не е много коректен. Поне не и в контекста на нашите писаници.

Предимството на скриптов език е само едно. Това за домашно. Един от недостатъците е интерпретаторът, и това че всеки път трябва да се парсва, което е бавно. Разните zend Optimizer-i и т.н., просто го доближават до компилираните езици, където другите отдавна са били и са. За мен недостатък на ASPX.NET е че не се компилира до нейтив код :), ами разчита на фреймуърк, но това не пречи да не е бавен. Java също не е нейтив код, и има фреймуърк, само дето е по-тромава, но все пак .NET е за Windows, а Java е мултиплатформена, така че може да се очаква.

Ако искате framework за PHP - свалете си един от интернет и го използвайте както намерите за добре. Ако не ви харесват - напишете свой, нали сте писачи ;)

А, ето ключов момент. "Свалете си един (някакъв) и си го ползвайте". И ако някой друг погледне твоя код, и не е работил с тоя фреймуърк, ето ти предпоставка за проблеми. В .NET фреймуърка е един, и поне в него място за недоразумения от ползване на различни фреймуъркове, няма. Става малко като Windows vs Linux с хилядите му дистрибуции. Понякога липсата на голям избор, пред наличието на само един достъпен, но добре направен, е по-добрия вариант :D .

 

Ех, тоя пост го написах на фул скрийн в Notepad, и пак пространството ми се видя малко, камо ли тва поленце във форума :bgrin:

Link to comment
Share on other sites

Не разбрах как решихте, че слабото типизиране на езика е негов минус? Ако не знаеш какво пишеш - да, за теб ще е минус и ще ти е трудно - в такъв случай просто използвай type casting, за да знаеш какъв тип проверяваш. Ето пример:

 

if (!$x) echo $x;

 

При това положение, echo-то ще ти се изпълни при следните случаи:

- $x = false

- $x = 0

- $x = '' (празен стринг)

- $x = array() (празен масив)

 

Ако искаш да провериш дали променливата ти е === 'false', просто ползвай правилното сравнение:

 

if ($x === false) echo $x;

 

В дадения пример, $x ти е false, така че няма да ти извади нищо :D Но схванахте идеята на примера, надявам се.

 

Аууу как успях да изтърва да отговоря на това одеве.

 

Я да видим сега - значи кое му е хубавото да няма типове. Числа, стрингове, ябълки, круши - всичко е някакъв обект. Проверки от сорта if ($a == $B) почват да придобиват леко извратен смисъл. И за да си сигурен че двете са от един и същи тип в крайна сметка почват да се пишат какви ли не щуротии или пък винаги да се cast-ва всичко до стрингове за да е ясно какво сравняваме. Отделно сравнението if ($a === $B) ... Няма да коментирам четливостта на горното и кокоренето този "if" с колко равенства е сравнението...

 

Повече или по-малко PHP учи на кофти навици. Няколко примера:

 

1. Липса на подредба - виждал съм PHP програмисти да пишат и на друго - и пак изглежда кода като спагети - всичко нахвърляно кое което където сварили. Не казвам че всички пишат така - има и сериозни проекти ползващи templates или frameworks подобни на asp.net, но повечето програмисти на PHP почват именно по гореописания начин - html, php code, всичко нахвърляно едно след друго...

 

2. Липса на по-сериозна архитектура - да не за всичко е така но основното приложение на PHP е бързото правене на малки проекти и оттам инерцията "да се нахвърля нещо набързо". Нагледал съм се на проекти писани на парче на какви ли не езици но VB и PHP държат класацията за нахвърлян код колкото да тръгне.

 

3. Имена на функции - те функциите от библиотеките на PHP са без единна концепция за именуване а какво остана за тези които ги ползват - Теди даде примери преди за стринговете.

 

4. Четливост - какво винаги съм казвал - тоя знак $ пред всяка променлива буквално ми бърка в г.з. :)

 

Пак казвам че PHP си има приложение и за по-сериозни неща с един backend писан на C++ си е друго нещо, но не може всичко да се пише на PHP, особено при по-големи проекти. Съгласен ли си?

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
×
  • Create New...