Variable Casting

24 отговора 980 прегледа
#1

Variable Casting



Moscow, раз-два-три, Moscow, посмотри.

Пречи ли ви недефиниран тип на променливите, да|не

  • Да, безусловно искам да се дефинира тип на променливите2 (12%)
  • Да, защото ми се добавя работа за определянето на типа0 (0%)
  • Да, но това не е най-важното1 (6%)
  • Все ми е тая0 (0%)
  • Не, но е добре да има4 (24%)
  • Не, нямам нужда от определянето на типа1 (6%)
  • Не, недефиниран тип ми дава повече свобода3 (18%)
  • Не, нямам проблеми6 (35%)

Гласували: 17

Отговор
в отговор на Bълk #2

Re: Въпрос

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

Иначе като идея е добре да ги има типовете. но не само на променливите. на променливите не пречи толкова. Виж на функциите трябва да има. Да се знае какво се връща. Липсата на тип на функциите е много по голям недостатък.

Break The UnBreakable
Отговор
в отговор на nupaT #3

Re: Въпрос

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

между другото, ти си автор на уеб-бейсъд ФТП интерфейс към файловата система, ползваш ли обектно-ориентиран подход към нея или не, как ги раглеждаш файлове и директории, директорията като клас с проперти и друг кляс който и списък от класове които представят всеки файл или как?

Moscow, раз-два-три, Moscow, посмотри.
Отговор
в отговор на Bълk #4

Re: Въпрос

За ФТП системата не. Започнал съм да я пренаписвам и до момента съм съчинил няколко класа който се наследяват един друг. Но все още е много малко. За нищо не става до момента. Както и да е. Директориите ги взимам с фтп_равлист и мачвам за +д (ако не се лъжа така беше, като се прибера ще погледна ще пиша пак) и в зависимост дали има или няма ги пъхам в масив като ако няма гледам да не е линк.

Break The UnBreakable
Отговор
в отговор на Bълk #5

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
Отговор
в отговор на Bълk #6

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
Отговор
в отговор на Bълk #7

Re: Variable Casting

Динамичните типове ми дават по-голяма свобода. Много мразя някой компилатор да ме бие през ръцете да слагам кастове или да имплементирам интерфейси.

Типовете в ПХП освен, че са динамични, са и слаби. Това вече не ми харесва. Бих искал като събирам стринг и число да получа някаква грешка. Малко ми е криво това автоматично преобразуване в ПХП дето прави 2 + "3" -- 5 и 2 + "aa" -- 2.

За щастие, благодарение на lastcraft.com, не съм се парил от такива преобразувания.

Отговор
в отговор на Дeшeв #8

Re: Variable Casting

Малко ми е криво това автоматично преобразуване в ПХП дето прави 2 + "3" -- 5 и 2 + "aa" -- 2.

а на мене ми е криво единствено 2 + "aa" -- 2...
иначе кво му е на 2 + "3" ???

Just a genius

Отговор
в отговор на Blake #9

Re: Variable Casting

"иначе кво му е на 2 + "3" ???"

Ми може да искам да получа "23", не 5

Отговор
в отговор на nupaT #10

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_destroy
Отговор
в отговор на nupaT #11

Re: Въпрос

ако срещаш затруднения с пасив мода и дата конекцията :
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
Отговор
в отговор на Paдo #12

Re: Variable Casting

ако приемем, че ползваш ПХП за целта, то тогава въпроса ти спада в главата "леко безмислени", щото стрингове не се конкатенират с "+", а с ".", иначе ако се абстрахираме от горепосоченото, като искаш да получиш "23", ще напишеш "2"+ 3, къф е проблема???

Just a genius

Отговор
в отговор на Дeшeв #13

Re: Variable Casting

Понякога е хубаво, понякога не... Снощи се изприщих докато разбера какъв му е проблема на един мейл сървър да чете нещо си от едно view на постгрето. После се оказа че въпросното чудо е писано за mysql и е пачвано за постгре и става някакво безумие тъй като на mysqla не му дреме много много за data types за разлика от постгрето. Но определено понякога си е необходимо да си дефинираш типовете данни (тия дни си мигрирам акаунтинга от mysql на постгре и определено почват да ми харесват разни благинки)

Надеждата умира последна...
Но все пак умира
Отговор
в отговор на Blake #14

Re: Variable Casting

Е, с "2" и 3 е лесно, но в кода има $varX и $varY. Всъщност не е лошо в една променлива да пъхаш различни по тип стойности, само че предпочитам като ги смесвам да използвам to_X или примерно да се хвърли ексепшън (може пък просто да е параноя).

Отговор
в отговор на ro6avia #15

Re: Въпрос

а случва се. ако сме чели една и съща документация

Break The UnBreakable
Отговор
в отговор на Paдo #16

Re: Variable Casting

примерно можеш да напправиш
$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
Отговор
в отговор на ro6avia #17

Re: Variable Casting

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

Отговор
в отговор на Paдo #18

Re: Variable Casting

бе май точно на тва се дължи...
по принцип е малко трудно да сбъркаш точно подобно нещо в ПХП, щото както споменах, конкатенирането на стринг и аритметичното събиране се извършват с различни символи - съответно . и +

Just a genius

Отговор
в отговор на Bълk #19

Re: Variable Casting

убао... ама некст кейс ...

function a($var){...}

дали щеше да е по-добре да има възможност за

function a(int $var){....} и заедно с това да има и дефиниция function a(string $var) или funtion a(array $var).

да не говориме за mixed variables дет в масива може да бъде какво ли не, не е ли по-добре да се има мискед, но заедно с това и да се добави възможност да се дефинира стриктно типа на елементите в масив?

Moscow, раз-два-три, Moscow, посмотри.
Отговор
в отговор на Blake #20

Re: Variable Casting

Именно, ако напиша $x + $y очаквайки да залепя два стринга, пък $x == 2, а $y == "3", ще получа 5, а не "23" без никакви оплаквания от PHP. Вярно - грешно е да очаквам да лепя стрингове с +, но пък и PHP би могъл да бутне едно рамо и да ме предупреди :)) (т'ва в сферата на пожеланията - иначе добре, че има тест-хави на разположение)

Отговор