Variable Casting
24 отговора
980 прегледа
Re: Въпрос
Отговорите от тази анкета ще послужат ли някъде.
Например за слагането на типове в следващи версии или нещо такова.
Иначе като идея е добре да ги има типовете. но не само на променливите. на променливите не пречи толкова. Виж на функциите трябва да има. Да се знае какво се връща. Липсата на тип на функциите е много по голям недостатък.
Break The UnBreakable
Например за слагането на типове в следващи версии или нещо такова.
Иначе като идея е добре да ги има типовете. но не само на променливите. на променливите не пречи толкова. Виж на функциите трябва да има. Да се знае какво се връща. Липсата на тип на функциите е много по голям недостатък.
Break The UnBreakable
Re: Въпрос
просто се допитвам кой как кво и що, на мен лично ми се е стегнала шапката покрай параметрите и броя им в конструкторите да не говориме за броя на конструкторите в един клас според типа на параметрите, то това е респективно функциите.
между другото, ти си автор на уеб-бейсъд ФТП интерфейс към файловата система, ползваш ли обектно-ориентиран подход към нея или не, как ги раглеждаш файлове и директории, директорията като клас с проперти и друг кляс който и списък от класове които представят всеки файл или как?
Moscow, раз-два-три, Moscow, посмотри.
между другото, ти си автор на уеб-бейсъд ФТП интерфейс към файловата система, ползваш ли обектно-ориентиран подход към нея или не, как ги раглеждаш файлове и директории, директорията като клас с проперти и друг кляс който и списък от класове които представят всеки файл или как?
Moscow, раз-два-три, Moscow, посмотри.
Re: Въпрос
За ФТП системата не. Започнал съм да я пренаписвам и до момента съм съчинил няколко класа който се наследяват един друг. Но все още е много малко. За нищо не става до момента. Както и да е. Директориите ги взимам с фтп_равлист и мачвам за +д (ако не се лъжа така беше, като се прибера ще погледна ще пиша пак) и в зависимост дали има или няма ги пъхам в масив като ако няма гледам да не е линк.
Break The UnBreakable
Break The UnBreakable
Re: Въпрос
ето и какво съм измислил по въпроса с директориите и файловете.
$contents = ftp_rawlist($ftp,"");
$i=0;
while ($contents[$i]):
$item[] = split("[ ]+",$contents[$i],9);
$item_type=substr($item[$i][0],0,1);
switch($item_type):
case 'd' //directory
case 'l' //link
case '-' //file
case '+' //neshto si na drug potrebitel
endswitch;
$i++;
endwhile;
спестил съм някой неща от кода, но става ясно каква е идеята
Break The UnBreakable
$contents = ftp_rawlist($ftp,"");
$i=0;
while ($contents[$i]):
$item[] = split("[ ]+",$contents[$i],9);
$item_type=substr($item[$i][0],0,1);
switch($item_type):
case 'd' //directory
case 'l' //link
case '-' //file
case '+' //neshto si na drug potrebitel
endswitch;
$i++;
endwhile;
спестил съм някой неща от кода, но става ясно каква е идеята
Break The UnBreakable
Re: Въпрос
ето и какво съм сътворил до момента със обектното ориентираниа ФТП клиент
class Socket {
var $host;
var $user;
....
funciton connect() {
$this->stream = fsockopen(...);
....
}
function writesocket($cmd) {
fputs($this->stream,$cmd);
....
}
function readsocket() {
fgets(....);
...
}
има още функции за Error i RiseError
}
class FTP extends Socket {
var $host;
var $user;
...
function __construct($host, $user, $pass, $port=21) {
$this->host = host
...
$this->connect()
}
function login() {
$this->writesocket("USER ",$this->username);
if (preg_match("/331/i",$this->readsocket())) //username ok
}
}
функциите са ми изградени по този начин (работят за повечето ФТП сървъри)
но нямам време да довърша това което съм започнал
Break The UnBreakable
class Socket {
var $host;
var $user;
....
funciton connect() {
$this->stream = fsockopen(...);
....
}
function writesocket($cmd) {
fputs($this->stream,$cmd);
....
}
function readsocket() {
fgets(....);
...
}
има още функции за Error i RiseError
}
class FTP extends Socket {
var $host;
var $user;
...
function __construct($host, $user, $pass, $port=21) {
$this->host = host
...
$this->connect()
}
function login() {
$this->writesocket("USER ",$this->username);
if (preg_match("/331/i",$this->readsocket())) //username ok
}
}
функциите са ми изградени по този начин (работят за повечето ФТП сървъри)
но нямам време да довърша това което съм започнал
Break The UnBreakable
Re: Variable Casting
Динамичните типове ми дават по-голяма свобода. Много мразя някой компилатор да ме бие през ръцете да слагам кастове или да имплементирам интерфейси.
Типовете в ПХП освен, че са динамични, са и слаби. Това вече не ми харесва. Бих искал като събирам стринг и число да получа някаква грешка. Малко ми е криво това автоматично преобразуване в ПХП дето прави 2 + "3" -- 5 и 2 + "aa" -- 2.
За щастие, благодарение на lastcraft.com, не съм се парил от такива преобразувания.
Типовете в ПХП освен, че са динамични, са и слаби. Това вече не ми харесва. Бих искал като събирам стринг и число да получа някаква грешка. Малко ми е криво това автоматично преобразуване в ПХП дето прави 2 + "3" -- 5 и 2 + "aa" -- 2.
За щастие, благодарение на lastcraft.com, не съм се парил от такива преобразувания.
Re: Variable Casting
Малко ми е криво това автоматично преобразуване в ПХП дето прави 2 + "3" -- 5 и 2 + "aa" -- 2.
а на мене ми е криво единствено 2 + "aa" -- 2...
иначе кво му е на 2 + "3" ???
Just a genius
а на мене ми е криво единствено 2 + "aa" -- 2...
иначе кво му е на 2 + "3" ???
Re: Variable Casting
"иначе кво му е на 2 + "3" ???"
Ми може да искам да получа "23", не 5
Ми може да искам да получа "23", не 5
Re: Въпрос
Що ли имам гадното чуство, че сме писали едни и същи неща ;-))))
class FTP{
function connect($server, $user , $password){
$this->ftp = ftp_connect($server);
ftp_login($this->ftp,$user,$password) or die("login");
........
function get_files(){
$this->ftp_files = ftp_rawlist($this->ftp,".");
$this->all_files = array();
$i = 0;
foreach($this->ftp_files as $this->ftp_file){
$eregs=array();
$aaa = ereg("([-d])([rwx-]{9})[ ]*([0-9]*)[ ]*([a-zA-Z0-9_.-]*)[ ]*([a-zA-Z0-9_.-]*)[ ]*([0-9]*)[ ]*([A-Za-z]+[ ]*[0-9]+ [0-9: ]*) (.+)",$this->ftp_file,$eregs);
$this->all_files[$i]['type'] = (@trim($eregs[1]) == "d") ? 0 : $this->get_type($eregs[8]);
$this->all_files[$i]['name'] = $eregs[8];
$this->all_files[$i]['time'] = $this->ftp_time2stamp($eregs[7]);
$this->all_files[$i]['size'] = $eregs[6];
$this->all_files[$i]['raw_info'] = $this->ftp_file;
$i++;
}
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroyRe: Въпрос
ако срещаш затруднения с пасив мода и дата конекцията :
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
fwrite($conn,"PASV"."\n");
$tmp = fread($file,100000);
ereg("([0-9]*),([0-9]*),([0-9]*),([0-9]*),([0-9]*),([0-9]*)",$tmp,$eregs);
$data_port = "0x".dechex($eregs[5]).dechex($eregs[6]);
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: Variable Casting
ако приемем, че ползваш ПХП за целта, то тогава въпроса ти спада в главата "леко безмислени", щото стрингове не се конкатенират с "+", а с ".", иначе ако се абстрахираме от горепосоченото, като искаш да получиш "23", ще напишеш "2"+ 3, къф е проблема???
Just a genius
Re: Variable Casting
Понякога е хубаво, понякога не... Снощи се изприщих докато разбера какъв му е проблема на един мейл сървър да чете нещо си от едно view на постгрето. После се оказа че въпросното чудо е писано за mysql и е пачвано за постгре и става някакво безумие тъй като на mysqla не му дреме много много за data types за разлика от постгрето. Но определено понякога си е необходимо да си дефинираш типовете данни (тия дни си мигрирам акаунтинга от mysql на постгре и определено почват да ми харесват разни благинки)
Надеждата умира последна...
Но все пак умира
Надеждата умира последна...
Но все пак умира
Re: Variable Casting
Е, с "2" и 3 е лесно, но в кода има $varX и $varY. Всъщност не е лошо в една променлива да пъхаш различни по тип стойности, само че предпочитам като ги смесвам да използвам to_X или примерно да се хвърли ексепшън (може пък просто да е параноя).
Re: Въпрос
а случва се. ако сме чели една и съща документация 
Break The UnBreakable
Break The UnBreakable
Re: Variable Casting
примерно можеш да напправиш
$x = (int) $x;
$x = (float) $x;
$x = (string) $x;
etc ....
Пример :
Резултат :
int(12345678)
string(8) "12345678"
int(12345678)
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
$x = (int) $x;
$x = (float) $x;
$x = (string) $x;
etc ....
Пример :
<?
$x = 12345678;
var_dump($x);
$x = (string) $x;
var_dump($x);
$x = (int) $x;
var_dump($x);
?>
Резултат :
int(12345678)
string(8) "12345678"
int(12345678)
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: Variable Casting
Това добре, въпросът е, че ако (като) не напиша каст, интерпретаторът няма (в повечето случаи) да се оплаче. Получената стойност може да ми сгафи нещо по-надолу в кода и ще трябва да се сетя, че причината не е точно там. Предполагам, че се дължи на липсата ми на PHP навици, но ме притеснява.
Re: Variable Casting
бе май точно на тва се дължи...
по принцип е малко трудно да сбъркаш точно подобно нещо в ПХП, щото както споменах, конкатенирането на стринг и аритметичното събиране се извършват с различни символи - съответно . и +
Just a genius
по принцип е малко трудно да сбъркаш точно подобно нещо в ПХП, щото както споменах, конкатенирането на стринг и аритметичното събиране се извършват с различни символи - съответно . и +
Re: Variable Casting
убао... ама некст кейс ...
function a($var){...}
дали щеше да е по-добре да има възможност за
function a(int $var){....} и заедно с това да има и дефиниция function a(string $var) или funtion a(array $var).
да не говориме за mixed variables дет в масива може да бъде какво ли не, не е ли по-добре да се има мискед, но заедно с това и да се добави възможност да се дефинира стриктно типа на елементите в масив?
Moscow, раз-два-три, Moscow, посмотри.
function a($var){...}
дали щеше да е по-добре да има възможност за
function a(int $var){....} и заедно с това да има и дефиниция function a(string $var) или funtion a(array $var).
да не говориме за mixed variables дет в масива може да бъде какво ли не, не е ли по-добре да се има мискед, но заедно с това и да се добави възможност да се дефинира стриктно типа на елементите в масив?
Moscow, раз-два-три, Moscow, посмотри.
Re: Variable Casting
Именно, ако напиша $x + $y очаквайки да залепя два стринга, пък $x == 2, а $y == "3", ще получа 5, а не "23" без никакви оплаквания от PHP. Вярно - грешно е да очаквам да лепя стрингове с +, но пък и PHP би могъл да бутне едно рамо и да ме предупреди :)) (т'ва в сферата на пожеланията - иначе добре, че има тест-хави на разположение)